Romlige forskjeller i næringsstruktur, virkninger av eksogene sjokk i basissysselsettingen, og lokale forskjeller I sysselsettingsvekst.

I denne oppgaven vil vi se på næringsstrukturer på Haugalandet, Sunnhordland og Ullensvang.

Problemstillinger og beregninger vi vil se nærmere på

Oversikt over befolkningene i regionene

Haugalandet

Haugalandet består av kommunene Bokn (852), Haugesund (37357), Karmøy (42186), Sauda (4595), Tysvær(11065), Utsira(198) og Vindafjord(8714). tilsammen bor det 104967 personer i denne regionen. i tidsperioden vi har hentet inn data har det vert kommunesammenslåing i denne regionen. Da ble Ølen og vindafjord slått i sammen til en kommune (hvordan har vi tatt hensyn til dette???)

Sunnhordland og Ullensvang

Sunnhordland og Ullensvang består av kommunene Bømlo(11957), Etne(4062), Fitjar(3189), Kvinnherad(13071), Stord(18759), Sveio(5766), Tysnes(2869) og Ullensvang(11048). Tilsammen bor det 70721 personer i denne regionen.

Tallene er hentet fra SSB 09.01.21 (https://www.ssb.no/statbank/table/01223/tableViewLayout1/) gjelder for 4 kvartal 2020.

“Forklar litt om de forskjellige næringene”…..

1 Sysselsetting i ulike næringer, etter arbeidssted

Haugalandet

Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.

Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.

I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.

Warning: Removed 1 row(s) containing missing values (geom_path).

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.

Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.

I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.

Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.

Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.

Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.

I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.

Sunnhordland

Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.

Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.

For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.

En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.

Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.

Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??

Fortsett Her (OA, KH)

Hardanger

Til slutt må vi gjere det samme med Hardanger

I henhold til oppgavens krav til betrakter vi Hardanger før 2019 som Ullensvang- og Odda kommune som to separerte kommuner. i 2020 så ble Ullensvang, Odda og Jondal slått sammen til Ullensvang. Dette forklarer den voldsomme økningen i sysselsetting i regionen ved tidspunktet for kommunesammenslåing.

Warning: Removed 1 row(s) containing missing values (geom_path).

Ullensvang kommune har stor kraftproduksjon og hovednæringen er industri. Majoriteten av kraftproduksjonen foregår i tidligere Odda. Odda er et ensidig industristed, men har også en maritim næring i tillegg. I figur 16 ser vi at industrinæringen utgjør en betraktelig større andel av sysselsettingen i her. Industrinæringen er også omfattet og bygg- og anleggsvirksomhet. På motsatt side er jordbruk, helse- og sosialtjenester dominerende i Ullensvang.

Generelt om Ullensvang kommune

Ullensvang kommune (med Odda) har hatt en jevn og negativ befolkningsvekst i mange tiår. Det gjenspeiles ikke tydelig i våre modeller på grunn av skalaen som er brukt. I tillegg har vi ikke hensyntatt innvandrende arbeidere, eller midlertidige fraflyttede som for eksempel studenter.

2

Finner lokaliseringskvotienter for ulike næringer i ulike kommuner, og for regionen samlet

[1] 0.1050339
[1] 0.1050339

For region Haugaland:

For Sunnhordaland:

For Hardanger:

GINI Regionaltnivå

Haugalandet

Haugalandet
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 50367 2e-06 0.000111 0 435.6012 18.70584 1399.9540
2009 49548 3e-06 0.000091 0 394.1549 21.69867 404507.3533
2010 49793 5e-06 0.000074 0 322.9766 25.47550 275.1527
2011 51035 7e-06 0.000071 0 291.8300 26.44261 313.0738
2012 51459 3e-06 0.000079 0 471.2626 25.31286 210.6607
2013 51940 2e-06 0.000079 0 663.1602 25.36956 249.2110
2014 52578 1e-06 0.000077 0 1031.8851 25.78627 590.1378
2015 50552 4e-06 0.000095 0 396.0033 24.04333 761.0617
2016 50296 6e-06 0.000104 0 317.7330 23.72055 1284.0690
2017 50976 5e-06 0.000109 0 356.6107 23.56357 436.3016
2018 51214 4e-06 0.000109 0 401.9133 23.54160 225.7136
2019 51670 3e-06 0.000122 0 461.0766 22.22460 189.0190
2020 51039 4e-06 0.000131 0 424.8519 21.55281 176.8174

GINI Kommunalt nivå

Haugesund

Haugesund: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 17611 2.8e-05 4e-06 0e+00 43.39824 34.95132 55.70295
2009 17294 2.9e-05 3e-06 0e+00 42.50572 40.54894 60.75005
2010 17460 2.7e-05 2e-06 0e+00 46.40941 56.43869 82.04106
2011 17901 2.7e-05 2e-06 0e+00 51.26044 53.63729 67.07554
2012 18178 2.6e-05 3e-06 0e+00 54.34177 46.66353 141.25665
2013 18337 2.7e-05 3e-06 0e+00 55.25898 45.70694 113.64877
2014 18609 2.6e-05 2e-06 0e+00 57.08808 52.38028 115.16419
2015 17855 2.4e-05 2e-06 0e+00 56.93230 54.69388 57.73009
2016 17806 2.6e-05 2e-06 0e+00 54.61078 54.69499 57.46911
2017 18117 2.4e-05 3e-06 0e+00 57.21419 52.20065 55.82136
2018 18295 2.6e-05 3e-06 0e+00 56.40031 51.93576 54.49432
2019 18448 2.6e-05 5e-06 0e+00 57.74196 41.05048 47.42545
2020 18137 2.4e-05 6e-06 1e-06 58.31852 35.84411 40.22532
Haugesund: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 17611 0.0074 0.1300 0.2071 4.3621 14.5332 27.1255 0.0017 0.0089 0.0076
2009 17294 0.0066 0.1206 0.2127 4.3486 13.8550 28.3388 0.0015 0.0087 0.0075
2010 17460 0.0070 0.1080 0.2107 4.1135 13.0092 28.6184 0.0017 0.0083 0.0074
2011 17901 0.0069 0.1082 0.2141 3.7834 12.8102 28.5035 0.0018 0.0084 0.0075
2012 18178 0.0069 0.1100 0.2044 3.6003 12.6100 28.0988 0.0019 0.0087 0.0073
2013 18337 0.0063 0.1101 0.2063 3.4804 12.5933 28.2089 0.0018 0.0087 0.0073
2014 18609 0.0064 0.1066 0.2069 3.4128 12.4561 28.2330 0.0019 0.0086 0.0073
2015 17855 0.0068 0.1013 0.2223 3.5487 12.0773 29.8133 0.0019 0.0084 0.0075
2016 17806 0.0062 0.0979 0.2245 3.5946 11.6931 30.4036 0.0017 0.0084 0.0074
2017 18117 0.0068 0.0974 0.2245 3.5460 11.4363 30.1846 0.0019 0.0085 0.0074
2018 18295 0.0058 0.0971 0.2245 3.4585 11.4145 30.2355 0.0017 0.0085 0.0074
2019 18448 0.0060 0.1021 0.2270 3.4205 11.4254 30.2480 0.0017 0.0089 0.0075
2020 18137 0.0066 0.1050 0.2348 3.5134 11.4044 31.0431 0.0019 0.0092 0.0076

GINI Kommunalt nivå

Bokn

Bokn: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 412 0e+00 0 0 9.265663 66.04803 41.42099
2009 407 0e+00 0 0 8.350102 7395.58720 37.39901
2010 420 1e-06 0 0 8.232807 220.82720 24.16725
2011 428 1e-06 0 0 7.052729 619.24877 20.15114
2012 425 1e-06 0 0 8.132938 309.92125 48.03532
2013 439 0e+00 0 0 9.909167 82.94909 45.23552
2014 434 0e+00 0 0 9.731145 53.99395 47.98403
2015 424 1e-06 0 0 8.370275 62.40629 38.87511
2016 427 1e-06 0 0 7.420518 71.34951 27.64706
2017 424 1e-06 0 0 6.170807 72.90931 33.68794
2018 425 1e-06 0 0 6.748289 35.63639 31.23108
2019 443 1e-06 0 0 6.848420 35.29806 138.29443
2020 439 1e-06 0 0 7.760597 19.83052 138.30512
Bokn
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 412 0.1383 0.1165 0.1650 186.4587 621.2257 1159.483 0.0007 2e-04 1e-04
2009 407 0.1499 0.0958 0.1695 184.7789 588.7174 1204.155 0.0008 2e-04 1e-04
2010 420 0.1500 0.0857 0.1571 171.0048 540.8119 1189.709 0.0009 2e-04 1e-04
2011 428 0.1682 0.0911 0.1495 158.2407 535.7850 1192.154 0.0011 2e-04 1e-04
2012 425 0.1482 0.0918 0.1765 153.9906 539.3529 1201.835 0.0010 2e-04 1e-04
2013 439 0.1253 0.1002 0.1754 145.3759 526.0205 1178.283 0.0009 2e-04 1e-04
2014 434 0.1267 0.1060 0.1774 146.3318 534.0922 1210.571 0.0009 2e-04 1e-04
2015 424 0.1439 0.0991 0.1792 149.4387 508.5873 1255.465 0.0010 2e-04 1e-04
2016 427 0.1593 0.0937 0.1710 149.8970 487.6042 1267.838 0.0011 2e-04 1e-04
2017 424 0.1863 0.0920 0.1769 151.5165 488.6604 1289.752 0.0012 2e-04 1e-04
2018 425 0.1718 0.1059 0.1741 148.8776 491.3624 1301.548 0.0012 2e-04 1e-04
2019 443 0.1693 0.1061 0.1986 142.4424 475.7923 1259.628 0.0012 2e-04 2e-04
2020 439 0.1526 0.1276 0.2027 145.1549 471.1663 1282.524 0.0011 3e-04 2e-04

GINI Kommunalt nivå

Tysvær

Tysvær: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 5193 6e-06 0 0 27.18744 93.37426 142.39765
2009 5145 7e-06 0 0 26.65220 75.33551 139.73894
2010 5219 7e-06 0 0 27.74925 124.19307 148.76566
2011 5574 6e-06 0 0 33.44731 109.10156 55.68156
2012 5470 6e-06 0 0 35.58264 79.62536 97.38526
2013 5482 5e-06 0 0 39.04164 73.44589 108.07665
2014 5591 4e-06 0 0 44.02012 69.92755 211.22384
2015 5412 5e-06 0 0 36.57733 67.12334 191.30078
2016 5409 6e-06 0 0 35.22895 52.97124 89.59993
2017 5437 5e-06 0 0 39.66927 56.35909 146.44512
2018 5444 4e-06 0 0 42.98937 49.78888 533.20329
2019 5550 4e-06 0 0 43.77327 51.67297 235.02172
2020 5503 5e-06 0 0 38.69103 44.91354 113.62509
Tysvær
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 5193 0.0672 0.1121 0.1822 14.7932 49.2865 91.9906 0.0045 0.0023 0.0020
2009 5145 0.0676 0.1092 0.1891 14.6171 46.5710 95.2558 0.0046 0.0023 0.0020
2010 5219 0.0646 0.0983 0.1918 13.7616 43.5219 95.7421 0.0047 0.0023 0.0020
2011 5574 0.0563 0.0987 0.1812 12.1505 41.1403 91.5396 0.0046 0.0024 0.0020
2012 5470 0.0534 0.1011 0.1870 11.9645 41.9059 93.3784 0.0045 0.0024 0.0020
2013 5482 0.0500 0.1018 0.1883 11.6417 42.1239 94.3572 0.0043 0.0024 0.0020
2014 5591 0.0467 0.1018 0.1935 11.3590 41.4588 93.9703 0.0041 0.0025 0.0021
2015 5412 0.0517 0.0979 0.1997 11.7077 39.8450 98.3586 0.0044 0.0025 0.0020
2016 5409 0.0529 0.0985 0.1960 11.8332 38.4927 100.0863 0.0045 0.0026 0.0020
2017 5437 0.0495 0.0960 0.1997 11.8159 38.1078 100.5803 0.0042 0.0025 0.0020
2018 5444 0.0468 0.0979 0.2043 11.6225 38.3595 101.6087 0.0040 0.0026 0.0020
2019 5550 0.0461 0.0971 0.2016 11.3697 37.9777 100.5432 0.0041 0.0026 0.0020
2020 5503 0.0496 0.0994 0.2012 11.5797 37.5871 102.3129 0.0043 0.0026 0.0020

GINI Kommunalt nivå

Karmøy

Karmøy: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 20182 2e-06 4.1e-05 0 210.1846 12.24439 127.5319
2009 19767 1e-06 3.1e-05 0 243.0018 14.92759 210.9479
2010 19754 1e-06 2.3e-05 0 305.4325 17.96887 124.5623
2011 20028 2e-06 2.0e-05 0 226.4475 19.38142 202.8559
2012 20304 2e-06 2.0e-05 0 238.1573 19.57346 180.0833
2013 20572 3e-06 1.9e-05 0 201.0946 20.63139 185.2065
2014 20714 3e-06 1.9e-05 0 196.4961 20.71105 263.0355
2015 19862 2e-06 2.2e-05 0 199.4498 19.80640 988.7477
2016 19754 1e-06 2.5e-05 0 254.0459 18.89665 4244.5327
2017 20047 2e-06 2.9e-05 0 212.1639 17.99531 1844.0592
2018 20074 1e-06 2.9e-05 0 259.6066 17.81476 213.5412
2019 20247 1e-06 3.0e-05 0 314.5257 17.61376 213.9878
2020 20063 2e-06 3.2e-05 0 216.2718 17.03960 431.5109
Karmøy
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 20182 0.0257 0.1830 0.1813 3.8064 12.6818 23.6700 0.0067 0.0144 0.0077
2009 19767 0.0260 0.1629 0.1915 3.8046 12.1216 24.7934 0.0068 0.0134 0.0077
2010 19754 0.0253 0.1459 0.1905 3.6358 11.4985 25.2950 0.0069 0.0127 0.0075
2011 20028 0.0220 0.1411 0.1942 3.3816 11.4498 25.4764 0.0065 0.0123 0.0076
2012 20304 0.0211 0.1396 0.1917 3.2233 11.2896 25.1566 0.0065 0.0124 0.0076
2013 20572 0.0194 0.1366 0.1921 3.1023 11.2251 25.1442 0.0063 0.0122 0.0076
2014 20714 0.0189 0.1358 0.1945 3.0659 11.1903 25.3639 0.0062 0.0121 0.0077
2015 19862 0.0194 0.1335 0.2040 3.1901 10.8570 26.8008 0.0061 0.0123 0.0076
2016 19754 0.0206 0.1326 0.2069 3.2402 10.5400 27.4054 0.0063 0.0126 0.0075
2017 20047 0.0196 0.1338 0.2071 3.2046 10.3353 27.2786 0.0061 0.0129 0.0076
2018 20074 0.0197 0.1340 0.2108 3.1520 10.4030 27.5559 0.0063 0.0129 0.0077
2019 20247 0.0201 0.1345 0.2105 3.1166 10.4102 27.5604 0.0064 0.0129 0.0076
2020 20063 0.0191 0.1358 0.2123 3.1761 10.3096 28.0630 0.0060 0.0132 0.0076

3 Sysselsetting i ulike næringer, etter bosted (Modeller under arbeid)

Haugalandet

Sunnhordland

Hardanger

3.1 Lokaliseringskvotienter (Venter på svar frå Inge ang. GINI-verdiar.)

Lokaliseringskvotienter for regionene samlet (Må til litt meir arbeid endo)

Haugalandet 2008-2020

  • Eir_Er_Jordbruk = Samlet sysselsetting i region Haugalandet
  • Eir_Er_Industri = Samlet sysselsetting innen Industri-sektoren i region Haugalandet
  • Eir_Er_El_Vann_Reno = Samlet sysselsetting innen Eleketrisitet, Vann og Renovasjon-sektoren i region Haugalandet
  • Eir_Er_Bygg_og_Anlegg = Samlet sysselsetting innen Bygge- og Anleggsvirksomhet-sektoren i region Haugalandet
  • Eir_Er_Finans = Samlet sysselsetting innen Finansiering og Forsikring-sektoren i region Haugalandet
  • Eir_Er_Undervisning = Samlet sysselsetting innen Undervisning-sektoren i region Haugalandet
  • Eir_Er_Helse = Samlet sysselsetting innen Helse- og Sosialtjenester-sektoren i region Haugalandet
Lokalkvotient, region: Haugalandet
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 47530 0.034042 0.157606 0.013570 0.078287 0.009594 0.075279 0.201894
2009 47013 0.033544 0.148257 0.013826 0.080722 0.009210 0.080127 0.208517
2010 47176 0.032580 0.141067 0.014308 0.081143 0.008839 0.081609 0.207690
2011 48276 0.030636 0.138682 0.014438 0.089030 0.008016 0.079211 0.209711
2012 48708 0.028271 0.140696 0.014679 0.084565 0.007719 0.080295 0.205654
2013 49011 0.026606 0.140315 0.016017 0.089082 0.007223 0.079309 0.206403
2014 49518 0.025365 0.136657 0.014823 0.088210 0.006583 0.080233 0.210530
2015 48043 0.027684 0.135504 0.013509 0.088587 0.006744 0.080137 0.222218
2016 47923 0.028254 0.131920 0.014857 0.087369 0.006406 0.082445 0.222524
2017 48957 0.027146 0.130298 0.015013 0.089282 0.006026 0.081521 0.221255
2018 48964 0.026795 0.130463 0.014623 0.089025 0.005576 0.082162 0.224369
2019 49295 0.025966 0.133137 0.016006 0.086946 0.005376 0.080941 0.224161
2020 48971 0.026587 0.135550 0.016316 0.087623 0.005064 0.082110 0.225644
Haugalandet
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 47530 5e-06 0.000109 2e-06 274.7795 17.77925 78.63547
2009 47013 5e-06 0.000105 1e-06 293.7259 19.11604 81.77438
2010 47176 7e-06 0.000111 1e-06 247.7570 19.68778 109.06295
2011 48276 9e-06 0.000107 1e-06 238.6734 20.33580 94.71229
2012 48708 5e-06 0.000123 1e-06 333.7480 19.17184 119.48788
2013 49011 3e-06 0.000122 1e-06 448.6259 19.17766 112.38161
2014 49518 1e-06 0.000110 1e-06 714.4856 20.33440 81.50790
2015 48043 6e-06 0.000137 2e-06 304.6451 19.05942 57.91832
2016 47923 8e-06 0.000145 2e-06 265.2847 19.13503 64.89427
2017 48957 5e-06 0.000151 2e-06 345.2287 19.21707 68.11217
2018 48964 6e-06 0.000152 3e-06 310.3869 18.99569 54.83235
2019 49295 4e-06 0.000168 3e-06 372.3899 18.05936 54.69338
2020 48971 5e-06 0.000191 2e-06 354.1514 17.11931 63.77723

Kommunenivå på Haugalandet (Haugesund, Karmøy, Tysvær og Bokn)

Haugesund
Haugesund: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 21322 5.6e-05 3.0e-06 3e-06 37.13085 51.90441 27.39294
2009 21160 5.8e-05 5.0e-06 2e-06 37.07407 39.19908 29.73809
2010 21233 5.5e-05 6.0e-06 2e-06 39.75675 37.30323 28.81800
2011 21734 5.6e-05 8.0e-06 2e-06 42.71715 33.19959 27.01155
2012 21986 5.5e-05 1.3e-05 2e-06 45.17553 26.83008 31.29721
2013 22143 5.4e-05 1.4e-05 2e-06 47.23484 25.97054 32.38889
2014 22190 5.3e-05 1.0e-05 2e-06 48.05306 29.95301 31.85500
2015 21328 4.8e-05 8.0e-06 4e-06 48.42594 35.54632 20.83248
2016 21056 4.9e-05 6.0e-06 4e-06 46.94366 40.59506 19.95813
2017 21372 4.9e-05 4.0e-06 4e-06 47.67733 48.86069 19.46260
2018 21346 4.8e-05 5.0e-06 4e-06 48.71313 45.72239 18.29265
2019 21429 4.2e-05 6.0e-06 5e-06 52.28071 42.46819 17.91328
2020 20852 4.2e-05 9.0e-06 6e-06 50.54825 34.09645 15.62150
Haugesund: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 21322 0.0035 0.1206 0.2257 3.6003 12.0033 22.4027 0.0010 0.0100 0.0101
2009 21160 0.0032 0.1215 0.2299 3.5566 11.3220 23.1631 0.0009 0.0107 0.0099
2010 21233 0.0034 0.1171 0.2332 3.3836 10.7013 23.5331 0.0010 0.0109 0.0099
2011 21734 0.0030 0.1196 0.2362 3.1175 10.5511 23.4761 0.0010 0.0113 0.0101
2012 21986 0.0031 0.1258 0.2292 2.9762 10.4257 23.2316 0.0011 0.0121 0.0099
2013 22143 0.0032 0.1267 0.2284 2.8833 10.4286 23.3602 0.0011 0.0121 0.0098
2014 22190 0.0032 0.1209 0.2297 2.8620 10.4471 23.6769 0.0011 0.0116 0.0097
2015 21328 0.0038 0.1112 0.2530 2.9713 10.1111 24.9565 0.0013 0.0110 0.0101
2016 21056 0.0032 0.1043 0.2572 3.0392 9.8881 25.7088 0.0010 0.0105 0.0100
2017 21372 0.0033 0.0987 0.2580 3.0037 9.6940 25.5878 0.0011 0.0102 0.0101
2018 21346 0.0030 0.0997 0.2608 2.9635 9.7829 25.9132 0.0010 0.0102 0.0101
2019 21429 0.0042 0.1013 0.2617 2.9447 9.8360 26.0402 0.0014 0.0103 0.0100
2020 20852 0.0040 0.1065 0.2740 3.0560 9.9196 27.0012 0.0013 0.0107 0.0101
Bokn
Bokn: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 297 0e+00 0 0 7.076400 27.257803 16.671775
2009 296 0e+00 0 0 5.910691 25.516477 15.662416
2010 291 0e+00 0 0 6.368490 61.520893 11.094044
2011 293 1e-06 0 0 4.945050 61.369773 20.002312
2012 317 0e+00 0 0 7.206500 13.822168 9.198901
2013 327 1e-06 0 0 6.669571 12.992720 9.501377
2014 327 0e+00 0 0 7.943936 12.876975 9.298032
2015 301 1e-06 0 0 6.186378 27.348391 12.913202
2016 306 1e-06 0 0 5.718786 16.430315 24.241213
2017 311 1e-06 0 0 4.679622 24.563927 19.739049
2018 291 1e-06 0 0 5.005148 14.296613 18.169639
2019 327 1e-06 0 0 5.506238 12.306611 13.810143
2020 323 1e-06 0 0 5.444641 8.481016 22.776035
Bokn: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 297 0.1717 0.1380 0.2492 258.4714 861.7340 1608.320 0.0007 2e-04 2e-04
2009 296 0.1993 0.1351 0.2601 254.2500 809.3716 1655.848 0.0008 2e-04 2e-04
2010 291 0.1856 0.1065 0.2887 246.8900 780.8282 1717.107 0.0008 1e-04 2e-04
2011 293 0.2287 0.1058 0.2491 231.2491 782.6553 1741.396 0.0010 1e-04 1e-04
2012 317 0.1640 0.1609 0.3060 206.4196 723.0883 1611.265 0.0008 2e-04 2e-04
2013 327 0.1743 0.1651 0.3028 195.2416 706.1804 1581.847 0.0009 2e-04 2e-04
2014 327 0.1498 0.1651 0.3058 194.2110 708.9327 1606.700 0.0008 2e-04 2e-04
2015 301 0.1860 0.1196 0.2824 210.5349 716.4452 1768.349 0.0009 2e-04 2e-04
2016 306 0.1993 0.1405 0.2484 209.1275 680.4020 1769.033 0.0010 2e-04 1e-04
2017 311 0.2379 0.1190 0.2572 206.4180 666.1736 1758.399 0.0012 2e-04 1e-04
2018 291 0.2234 0.1478 0.2612 217.3814 717.6117 1900.835 0.0010 2e-04 1e-04
2019 327 0.2049 0.1590 0.2783 192.9694 644.5719 1706.471 0.0011 2e-04 2e-04
2020 323 0.2074 0.1950 0.2539 197.2848 640.3839 1743.124 0.0011 3e-04 1e-04
Tysvær
Tysvær: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 4048 5e-06 0e+00 0 23.14053 28.44557 60.22646
2009 4160 4e-06 0e+00 0 26.56107 32.21553 288.05235
2010 4232 4e-06 0e+00 0 28.36420 32.54334 140.40076
2011 4475 3e-06 0e+00 0 37.09019 30.12544 69.69579
2012 4423 3e-06 0e+00 0 41.25469 32.86191 81.01951
2013 4281 3e-06 0e+00 0 40.91130 31.37139 108.33505
2014 4329 2e-06 0e+00 0 50.18786 27.27801 266.05933
2015 4304 2e-06 0e+00 0 47.30815 115.11899 178.49305
2016 4314 2e-06 0e+00 0 48.81444 93.07896 47.15291
2017 4576 1e-06 0e+00 0 60.98597 38.81984 41.12099
2018 4620 1e-06 2e-06 0 63.20902 17.20843 39.04414
2019 4710 2e-06 1e-06 0 57.19657 18.78513 37.18022
2020 4773 2e-06 2e-06 0 52.69564 18.16005 30.17849
Tysvær: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 4048 0.0736 0.0662 0.2058 18.9639 63.2250 118.0017 0.0039 0.0010 0.0017
2009 4160 0.0678 0.0649 0.1998 18.0909 57.5899 117.8200 0.0037 0.0011 0.0017
2010 4232 0.0638 0.0595 0.1914 16.9766 53.6912 118.0714 0.0038 0.0011 0.0016
2011 4475 0.0534 0.0563 0.1848 15.1410 51.2442 114.0177 0.0035 0.0011 0.0016
2012 4423 0.0495 0.0581 0.1849 14.7943 51.8243 115.4807 0.0033 0.0011 0.0016
2013 4281 0.0488 0.0563 0.1883 14.9133 53.9409 120.8278 0.0033 0.0010 0.0016
2014 4329 0.0439 0.0508 0.1945 14.6701 53.5507 121.3654 0.0030 0.0009 0.0016
2015 4304 0.0455 0.0743 0.1993 14.7237 50.1046 123.6694 0.0031 0.0015 0.0016
2016 4314 0.0450 0.0904 0.1859 14.8338 48.2622 125.4808 0.0030 0.0019 0.0015
2017 4576 0.0406 0.1040 0.1823 14.0288 45.2753 119.5066 0.0029 0.0023 0.0015
2018 4620 0.0394 0.1359 0.1805 13.6922 45.2002 119.7279 0.0029 0.0030 0.0015
2019 4710 0.0408 0.1310 0.1790 13.3972 44.7505 118.4747 0.0030 0.0029 0.0015
2020 4773 0.0427 0.1322 0.1768 13.3507 43.3363 117.9612 0.0032 0.0031 0.0015
Karmøy
Karmøy: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 15194 0 5.0e-05 0 1509.3934 8.362457 147.01532
2009 14666 0 3.4e-05 0 734.1861 10.484147 2350.38157
2010 14591 0 3.0e-05 0 478.1462 11.637387 162.80094
2011 14781 0 2.5e-05 0 1145.2857 12.830825 2336.42034
2012 14989 0 2.2e-05 0 1523.9630 13.866661 533.30920
2013 15239 0 2.0e-05 0 1052.0677 14.891209 1961.40912
2014 15457 0 1.9e-05 0 462.4307 15.444220 158.56014
2015 15066 0 2.4e-05 0 545.3588 14.335219 238.40625
2016 15287 0 2.8e-05 0 2097.3333 13.957658 18005.30828
2017 15728 0 3.3e-05 0 457.2313 13.160277 302.51080
2018 15866 0 3.2e-05 0 990.6502 13.396798 598.32510
2019 15978 0 3.4e-05 0 371.7538 12.953569 1681.65208
2020 16059 0 3.5e-05 0 368.1716 13.042606 98.03155
Karmøy: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 15194 0.0311 0.2209 0.1824 5.0524 16.8445 31.4381 0.0061 0.0131 0.0058
2009 14666 0.0315 0.1913 0.1967 5.1315 16.3353 33.4195 0.0061 0.0117 0.0059
2010 14591 0.0306 0.1762 0.1924 4.9239 15.5727 34.2456 0.0062 0.0113 0.0056
2011 14781 0.0256 0.1674 0.1996 4.5840 15.5144 34.5192 0.0056 0.0108 0.0058
2012 14989 0.0246 0.1607 0.1954 4.3655 15.2925 34.0764 0.0056 0.0105 0.0057
2013 15239 0.0234 0.1553 0.1970 4.1895 15.1533 33.9434 0.0056 0.0103 0.0058
2014 15457 0.0218 0.1522 0.2046 4.1086 14.9978 33.9905 0.0053 0.0102 0.0060
2015 15066 0.0226 0.1528 0.2091 4.2062 14.3137 35.3294 0.0054 0.0107 0.0059
2016 15287 0.0240 0.1513 0.2072 4.1861 13.6196 35.4107 0.0057 0.0111 0.0059
2017 15728 0.0221 0.1542 0.2033 4.0816 13.1727 34.7700 0.0054 0.0117 0.0058
2018 15866 0.0226 0.1525 0.2078 3.9870 13.1618 34.8634 0.0057 0.0116 0.0060
2019 15978 0.0206 0.1550 0.2053 3.9492 13.1916 34.9240 0.0052 0.0117 0.0059
2020 16059 0.0210 0.1538 0.1998 3.9681 12.8803 35.0600 0.0053 0.0119 0.0057

Sunnhordland 2008-2020

  • Eir_Er_Jordbruk = Samlet sysselsetting i region Sunnhordland
  • Eir_Er_Industri = Samlet sysselsetting innen Industri-sektoren i region Sunnhordland
  • Eir_Er_El_Vann_Reno = Samlet sysselsetting innen Eleketrisitet, Vann og Renovasjon-sektoren i region Sunnhordland
  • Eir_Er_Bygg_og_Anlegg = Samlet sysselsetting innen Bygge- og Anleggsvirksomhet-sektoren i region Sunnhordland
  • Eir_Er_Finans = Samlet sysselsetting innen Finansiering og Forsikring-sektoren i region Sunnhordland
  • Eir_Er_Undervisning = Samlet sysselsetting innen Undervisning-sektoren i region Sunnhordland
  • Eir_Er_Helse = Samlet sysselsetting innen Helse- og Sosialtjenester-sektoren i region Sunnhordland
Lokalkvotienten, region: Sunnhordland
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 25705 0.057460 0.222525 0.015211 0.082007 0.008714 0.083991 0.197043
2009 25579 0.057586 0.214277 0.016263 0.083271 0.008484 0.084601 0.208648
2010 25164 0.057781 0.200564 0.016730 0.081267 0.008544 0.088579 0.217295
2011 25567 0.058630 0.195995 0.017131 0.084679 0.007040 0.087417 0.221614
2012 25340 0.054538 0.204933 0.017482 0.082320 0.006354 0.086148 0.224546
2013 25745 0.053447 0.206292 0.016780 0.084599 0.006021 0.086658 0.220043
2014 26116 0.052114 0.206310 0.017001 0.087341 0.005705 0.086384 0.215806
2015 25437 0.053308 0.200181 0.016826 0.090577 0.005661 0.088257 0.225341
2016 24932 0.055872 0.182817 0.015683 0.092131 0.004332 0.091409 0.236523
2017 25165 0.058693 0.182118 0.014941 0.095092 0.004411 0.089092 0.232108
2018 25417 0.058740 0.190463 0.014439 0.097454 0.004328 0.087264 0.232246
2019 25530 0.057462 0.193890 0.013239 0.097141 0.003917 0.086056 0.233098
2020 25379 0.059065 0.191418 0.015091 0.097246 0.000000 0.086646 0.236219
Region: Sunnhordland
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 25705 0.000082 0.000148 0e+00 36.95866 8.253249 127.11741
2009 25579 0.000087 0.000160 0e+00 36.43396 8.450759 80.90815
2010 25164 0.000105 0.000149 1e-06 34.20318 9.067027 53.26739
2011 25567 0.000147 0.000141 1e-06 31.07158 9.390777 44.52110
2012 25340 0.000128 0.000166 2e-06 34.17163 8.591273 36.68228
2013 25745 0.000137 0.000173 1e-06 34.39969 8.465892 44.36885
2014 26116 0.000134 0.000179 1e-06 35.52557 8.415335 56.99419
2015 25437 0.000135 0.000191 1e-06 34.59352 8.536449 49.04572
2016 24932 0.000150 0.000153 2e-06 31.85946 9.693915 34.00274
2017 25165 0.000182 0.000159 1e-06 29.03348 9.628618 39.16291
2018 25417 0.000200 0.000188 1e-06 28.43591 8.877574 38.29273
2019 25530 0.000191 0.000198 2e-06 29.25598 8.611390 36.73580
2020 25379 0.000198 0.000197 1e-06 28.32775 8.750280 38.08834

Kommunenivå i Sunnhordland (Stord, Kvinnherad, Bømlo og Sveio)

Stord
Stord: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 9301 1e-05 2.9e-05 1e-06 37.99855 6.704646 22.77044
2008 9629 9e-06 5.4e-05 0e+00 42.56625 5.470563 97.20628
2009 9523 8e-06 5.4e-05 0e+00 45.60307 5.691097 346.52613
2010 9161 7e-06 4.2e-05 0e+00 49.71333 6.164777 50.45615
2011 9228 8e-06 4.4e-05 0e+00 51.48673 6.103206 38.06090
2012 9354 7e-06 4.7e-05 0e+00 54.69384 5.934359 40.75037
2013 9685 8e-06 5.9e-05 0e+00 54.68658 5.438690 82.18451
2014 9938 9e-06 8.3e-05 0e+00 53.00341 5.047778 195.58373
2015 9656 9e-06 8.4e-05 0e+00 51.52101 5.074613 204.97716
2016 9188 7e-06 5.6e-05 0e+00 53.16954 5.927978 34.80295
2017 9409 7e-06 5.3e-05 0e+00 55.41152 6.195044 42.09682
2018 9462 8e-06 5.5e-05 0e+00 54.29113 6.068518 37.40030
2019 9456 8e-06 6.2e-05 0e+00 51.75478 5.816923 47.85938
Stord: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 9301 0.0041 0.2505 0.2331 8.2535 27.5169 51.3570 5e-04 0.0091 0.0045
2008 9629 0.0066 0.2787 0.1860 7.8158 24.8805 50.9015 9e-04 0.0112 0.0037
2009 9523 0.0066 0.2660 0.2014 7.5444 23.8602 52.4707 9e-04 0.0111 0.0038
2010 9161 0.0063 0.2517 0.2190 7.3961 25.0320 55.6958 9e-04 0.0101 0.0039
2011 9228 0.0059 0.2524 0.2236 7.0909 24.8395 55.3501 8e-04 0.0102 0.0040
2012 9354 0.0061 0.2567 0.2220 6.8253 24.6869 55.2987 9e-04 0.0104 0.0040
2013 9685 0.0057 0.2713 0.2104 6.5573 23.9361 54.2479 9e-04 0.0113 0.0039
2014 9938 0.0055 0.2811 0.1998 6.3766 21.6995 53.5594 9e-04 0.0130 0.0037
2015 9656 0.0051 0.2767 0.2120 6.6273 21.5620 56.0609 8e-04 0.0128 0.0038
2016 9188 0.0054 0.2470 0.2353 6.9869 22.5490 59.5192 8e-04 0.0110 0.0040
2017 9409 0.0055 0.2392 0.2299 6.7231 22.1942 58.7887 8e-04 0.0108 0.0039
2018 9462 0.0049 0.2425 0.2326 6.6689 22.2759 58.9744 7e-04 0.0109 0.0039
2019 9456 0.0044 0.2490 0.2309 6.7389 21.8744 59.5420 7e-04 0.0114 0.0039
Kvinnherad
Kvinnherad: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 5808 1.0e-05 3e-06 1e-06 24.25832 13.720804 12.14397
2008 6084 1.5e-05 9e-06 0e+00 21.22582 8.308388 26.59281
2009 6021 1.8e-05 9e-06 0e+00 19.92804 8.758368 27.65694
2010 5954 2.2e-05 5e-06 0e+00 18.63318 11.274955 25.52672
2011 6029 2.9e-05 5e-06 0e+00 17.04930 11.839721 22.11922
2012 5746 2.2e-05 7e-06 0e+00 19.03101 9.307269 17.67240
2013 5737 2.4e-05 5e-06 0e+00 18.35762 10.883476 21.60194
2014 5792 2.4e-05 5e-06 0e+00 18.58380 11.916350 26.57873
2015 5555 1.3e-05 3e-06 0e+00 24.15315 14.372947 16.41151
2016 5493 1.5e-05 3e-06 1e-06 21.98988 16.391508 13.65431
2017 5472 1.9e-05 3e-06 0e+00 19.89773 16.277446 17.42407
2018 5622 1.9e-05 6e-06 0e+00 20.50960 11.049327 17.70374
2019 5749 1.6e-05 7e-06 0e+00 22.42343 10.836029 18.08339
Kvinnherad: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 5808 0.0716 0.1742 0.2715 13.2173 44.0659 82.2436 0.0054 0.0040 0.0033
2008 6084 0.0773 0.2163 0.2339 12.3698 39.3777 80.5607 0.0062 0.0055 0.0029
2009 6021 0.0787 0.2045 0.2347 11.9324 37.7381 82.9892 0.0066 0.0054 0.0028
2010 5954 0.0801 0.1782 0.2383 11.3799 38.5149 85.6952 0.0070 0.0046 0.0028
2011 6029 0.0839 0.1730 0.2425 10.8534 38.0194 84.7190 0.0077 0.0046 0.0029
2012 5746 0.0769 0.1956 0.2541 11.1110 40.1881 90.0216 0.0069 0.0049 0.0028
2013 5737 0.0784 0.1794 0.2446 11.0697 40.4081 91.5794 0.0071 0.0044 0.0027
2014 5792 0.0782 0.1670 0.2426 10.9411 37.2324 91.8980 0.0071 0.0045 0.0026
2015 5555 0.0659 0.1492 0.2680 11.5199 37.4803 97.4481 0.0057 0.0040 0.0028
2016 5493 0.0697 0.1393 0.2798 11.6869 37.7171 99.5562 0.0060 0.0037 0.0028
2017 5472 0.0738 0.1393 0.2635 11.5603 38.1625 101.0861 0.0064 0.0036 0.0026
2018 5622 0.0720 0.1683 0.2624 11.2239 37.4911 99.2558 0.0064 0.0045 0.0026
2019 5749 0.0684 0.1694 0.2653 11.0842 35.9791 97.9351 0.0062 0.0047 0.0027
Bømlo
Bømlo: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 4890 6.0e-06 6.0e-06 0 25.55762 8.078003 196.17864
2008 4845 6.0e-06 1.2e-05 0 27.22297 5.780605 29.90455
2009 4831 7.0e-06 1.4e-05 0 25.95855 5.765718 50.29328
2010 4819 8.0e-06 1.1e-05 0 25.69390 6.261174 100.99321
2011 4865 7.0e-06 1.0e-05 0 27.79351 6.878525 1742.61665
2012 4885 7.0e-06 1.0e-05 0 28.25052 6.652753 259.71678
2013 4872 8.0e-06 1.0e-05 0 27.48769 6.815899 257.41825
2014 4890 9.0e-06 1.1e-05 0 25.78040 6.839606 201.94263
2015 4695 9.0e-06 1.2e-05 0 25.10064 6.440352 159.69387
2016 4662 1.0e-05 1.0e-05 0 22.74721 6.987961 172.36852
2017 4790 1.3e-05 1.0e-05 0 20.90942 7.125392 235.15014
2018 4885 1.3e-05 1.0e-05 0 21.87900 7.171995 154.05849
2019 4887 1.0e-05 1.3e-05 0 23.85442 6.568229 73.93914
Bømlo: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 4890 0.0695 0.2252 0.1943 15.6986 52.3384 97.6832 0.0044 0.0043 0.0020
2008 4845 0.0669 0.2689 0.1628 15.5331 49.4477 101.1622 0.0043 0.0054 0.0016
2009 4831 0.0671 0.2637 0.1786 14.8717 47.0339 103.4316 0.0045 0.0056 0.0017
2010 4819 0.0654 0.2492 0.1893 14.0602 47.5862 105.8786 0.0046 0.0052 0.0018
2011 4865 0.0613 0.2339 0.1967 13.4502 47.1159 104.9889 0.0046 0.0050 0.0019
2012 4885 0.0598 0.2385 0.1937 13.0694 47.2714 105.8882 0.0046 0.0050 0.0018
2013 4872 0.0603 0.2342 0.1944 13.0351 47.5823 107.8389 0.0046 0.0049 0.0018
2014 4890 0.0632 0.2292 0.2000 12.9593 44.1002 108.8493 0.0049 0.0052 0.0018
2015 4695 0.0643 0.2349 0.2009 13.6300 44.3457 115.2980 0.0047 0.0053 0.0017
2016 4662 0.0682 0.2214 0.2008 13.7701 44.4402 117.3020 0.0050 0.0050 0.0017
2017 4790 0.0714 0.2182 0.2019 13.2063 43.5960 115.4787 0.0054 0.0050 0.0017
2018 4885 0.0690 0.2172 0.1994 12.9173 43.1474 114.2305 0.0053 0.0050 0.0017
2019 4887 0.0657 0.2294 0.1964 13.0393 42.3254 115.2095 0.0050 0.0054 0.0017
Sveio
Sveio: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 1494 3e-06 0 0 11.101299 14.44421 10.643292
2008 1362 4e-06 0 0 9.268448 16.47379 15.538063
2009 1387 5e-06 0 0 9.041156 18.44149 12.884239
2010 1357 4e-06 0 0 10.118403 19.53600 12.035476
2011 1358 5e-06 0 0 9.451718 20.50383 12.448791
2012 1386 7e-06 0 0 8.338691 17.06779 10.097705
2013 1448 6e-06 0 0 9.089835 16.90197 9.855809
2014 1439 4e-06 0 0 11.615431 18.57039 10.575112
2015 1519 9e-06 0 0 8.131317 18.52367 14.144191
2016 1516 6e-06 0 0 9.344323 17.10219 12.242172
2017 1495 8e-06 0 0 8.603933 20.95586 14.125978
2018 1516 6e-06 0 0 9.674145 20.51681 13.922231
2019 1523 6e-06 0 0 9.412380 21.92055 16.163512
Sveio: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 1494 0.1205 0.0321 0.2831 51.3829 171.3086 319.7262 0.0023 2e-04 9e-04
2008 1362 0.1380 0.0352 0.2606 55.2555 175.8987 359.8612 0.0025 2e-04 7e-04
2009 1387 0.1391 0.0360 0.2761 51.7988 163.8219 360.2581 0.0027 2e-04 8e-04
2010 1357 0.1253 0.0383 0.2822 49.9307 168.9889 375.9978 0.0025 2e-04 8e-04
2011 1358 0.1311 0.0398 0.2776 48.1848 168.7916 376.1200 0.0027 2e-04 7e-04
2012 1386 0.1443 0.0296 0.2965 46.0635 166.6097 373.2063 0.0031 2e-04 8e-04
2013 1448 0.1340 0.0283 0.2997 43.8584 160.0974 362.8391 0.0031 2e-04 8e-04
2014 1439 0.1105 0.0292 0.2995 44.0382 149.8610 369.8909 0.0025 2e-04 8e-04
2015 1519 0.1475 0.0257 0.2778 42.1284 137.0658 356.3687 0.0035 2e-04 8e-04
2016 1516 0.1313 0.0198 0.2883 42.3456 136.6623 360.7269 0.0031 1e-04 8e-04
2017 1495 0.1398 0.0301 0.2769 42.3130 139.6823 369.9953 0.0033 2e-04 7e-04
2018 1516 0.1266 0.0290 0.2777 41.6234 139.0336 368.0844 0.0030 2e-04 8e-04
2019 1523 0.1300 0.0315 0.2718 41.8404 135.8135 369.6842 0.0031 2e-04 7e-04

Hardanger 2008-2020

  • Eir_Er_Jordbruk = Samlet sysselsetting i region Hardanger
  • Eir_Er_Industri = Samlet sysselsetting innen Industri-sektoren i region Hardanger
  • Eir_Er_El_Vann_Reno = Samlet sysselsetting innen Eleketrisitet, Vann og Renovasjon-sektoren i region Hardanger
  • Eir_Er_Bygg_og_Anlegg = Samlet sysselsetting innen Bygge- og Anleggsvirksomhet-sektoren i region Hardanger
  • Eir_Er_Finans = Samlet sysselsetting innen Finansiering og Forsikring-sektoren i region Hardanger
  • Eir_Er_Undervisning = Samlet sysselsetting innen Undervisning-sektoren i region Hardanger
  • Eir_Er_Helse = Samlet sysselsetting innen Helse- og Sosialtjenester-sektoren i region Hardanger
Lokalkvotient, region: Hardanger
År Alle Jordbruk Industri Vann Bygg Finans Underv. Helse
2008 5135 0.046154 0.193574 0.029796 0.104187 0.008569 0.068160 0.218890
2009 5122 0.046857 0.189965 0.027138 0.103280 0.008981 0.070090 0.226669
2010 5139 0.043199 0.182526 0.028605 0.116365 0.009146 0.071220 0.225725
2011 5098 0.041193 0.182621 0.024716 0.122009 0.008827 0.067870 0.225579
2012 4924 0.037368 0.197807 0.025386 0.092405 0.007311 0.067222 0.246954
2013 4875 0.036308 0.191795 0.025436 0.094564 0.007179 0.069744 0.241846
2014 4834 0.034754 0.188457 0.027720 0.096194 0.004137 0.067646 0.245552
2015 4746 0.034977 0.185209 0.026970 0.106195 0.004214 0.073114 0.247366
2016 4779 0.031597 0.169910 0.026156 0.106298 0.002511 0.075539 0.251726
2017 4782 0.030531 0.176704 0.023421 0.109159 0.002509 0.076537 0.246550
2018 4743 0.030150 0.185958 0.022560 0.107316 0.002530 0.071895 0.244571
2019 4827 0.031697 0.190180 0.023203 0.106277 0.002486 0.071887 0.245494
2020 5291 0.041391 0.185976 0.023814 0.107541 0.000000 0.072765 0.238518
Region: Hardanger
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 5135 1e-06 3e-06 0 63.48614 10.844444 33.65492
2009 5122 1e-06 4e-06 0 59.81821 10.636025 32.91504
2010 5139 1e-06 4e-06 0 68.23538 10.839966 36.75996
2011 5098 1e-06 4e-06 0 67.81450 10.739610 37.84135
2012 4924 1e-06 6e-06 0 82.68730 9.151565 20.13343
2013 4875 1e-06 5e-06 0 83.81914 9.650327 22.55210
2014 4834 1e-06 4e-06 0 92.68767 9.903231 21.14541
2015 4746 1e-06 5e-06 0 94.55552 9.787370 23.57695
2016 4779 0e+00 4e-06 0 140.59861 11.080301 22.41532
2017 4782 0e+00 5e-06 0 159.19718 10.158127 25.01511
2018 4743 0e+00 6e-06 0 152.06158 9.247394 26.01495
2019 4827 0e+00 7e-06 0 118.82212 8.895534 25.24158
2020 5291 2e-06 8e-06 0 56.72945 9.187786 35.02128

Kommunenivå i Hardanger (Odda og Ullensvang)

Odda
Odda(-2019): Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2008 3740 1e-06 4e-06 0 51.44083 7.018043 20.49546
2009 3702 1e-06 5e-06 0 53.20802 6.987378 19.14744
2010 3644 1e-06 5e-06 0 56.04945 6.966969 20.63557
2011 3642 1e-06 5e-06 0 60.37978 6.910631 21.46311
2012 3652 1e-06 6e-06 0 72.60219 6.289313 15.31141
2013 3607 1e-06 6e-06 0 72.24299 6.464556 18.07099
2014 3536 1e-06 5e-06 0 68.34183 6.688456 18.04542
2015 3489 1e-06 6e-06 0 69.59185 6.744805 22.09307
2016 3540 1e-06 5e-06 0 67.20610 7.712344 18.26469
2017 3521 1e-06 6e-06 0 69.88471 7.106769 20.87707
2018 3508 1e-06 7e-06 0 72.03947 6.496193 22.35952
2019 3566 1e-06 8e-06 0 64.81373 6.036981 23.95814
Odda(-2019): Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2008 3740 0.0110 0.2439 0.2380 20.5257 68.4318 127.7195 5e-04 0.0036 0.0019
2009 3702 0.0113 0.2391 0.2485 20.3290 64.7147 132.3963 6e-04 0.0037 0.0019
2010 3644 0.0107 0.2338 0.2470 19.7160 62.3548 137.1235 5e-04 0.0037 0.0018
2011 3642 0.0099 0.2342 0.2457 18.6041 62.9649 140.0958 5e-04 0.0037 0.0018
2012 3652 0.0115 0.2475 0.2626 17.9176 62.7653 139.8606 6e-04 0.0039 0.0019
2013 3607 0.0105 0.2429 0.2528 17.7000 64.0202 143.4056 6e-04 0.0038 0.0018
2014 3536 0.0093 0.2370 0.2537 17.9601 65.5602 148.5834 5e-04 0.0036 0.0017
2015 3489 0.0100 0.2313 0.2502 18.1631 61.8085 152.5575 6e-04 0.0037 0.0016
2016 3540 0.0096 0.2093 0.2619 18.0771 58.8144 152.9164 5e-04 0.0036 0.0017
2017 3521 0.0099 0.2190 0.2545 18.2323 58.8412 155.3144 5e-04 0.0037 0.0016
2018 3508 0.0097 0.2318 0.2509 18.0325 59.5282 157.6804 5e-04 0.0039 0.0016
2019 3566 0.0079 0.2434 0.2476 17.6952 59.1068 156.4823 4e-04 0.0041 0.0016
Ullensvang
Ullensvang: Gini & RDI
GINI
RDI
År Alle Primær Industri Helse Primær Industri Helse
2020 5291 1e-06 3e-06 0 91.002864 11.81813 20.26687
2008 1395 4e-06 0e+00 0 9.061056 26.90819 35.03107
2009 1420 5e-06 0e+00 0 9.017726 35.33227 34.71858
2010 1495 4e-06 0e+00 0 10.420845 31.26730 39.62045
2011 1456 4e-06 0e+00 0 10.612190 28.60060 45.15144
2012 1272 3e-06 0e+00 0 11.460270 30.17502 220.28207
2013 1268 3e-06 0e+00 0 11.674531 24.42023 81.25412
2014 1298 3e-06 0e+00 0 12.562003 37.31937 54.14553
2015 1257 2e-06 0e+00 0 12.541974 44.68168 30.91661
2016 1239 2e-06 0e+00 0 14.248799 47.71748 61.77963
2017 1261 2e-06 0e+00 0 15.515431 52.25725 54.66410
2018 1235 2e-06 0e+00 0 15.389743 45.67498 47.97606
2019 1261 2e-06 0e+00 0 13.268906 26.67736 33.86582
Ullensvang: Lokalkvotient
Eir/Er
Ein/En
LQ
År Alle Primær Industri Helse Primær Industri Helse Primær Industri Helse
2020 5291 0.0414 0.1860 0.2385 14.5088 48.3718 90.2799 0.0029 0.0038 0.0026
2008 1395 0.1405 0.0588 0.1677 53.9484 171.7376 351.3484 0.0026 0.0003 0.0005
2009 1420 0.1394 0.0620 0.1697 50.5951 160.0148 351.8859 0.0028 0.0004 0.0005
2010 1495 0.1224 0.0575 0.1739 45.3217 153.3900 341.2903 0.0027 0.0004 0.0005
2011 1456 0.1195 0.0536 0.1751 44.9416 157.4306 350.8043 0.0027 0.0003 0.0005
2012 1272 0.1116 0.0550 0.2020 50.1918 181.5417 406.6541 0.0022 0.0003 0.0005
2013 1268 0.1096 0.0465 0.2106 50.0844 182.8241 414.3462 0.0022 0.0003 0.0005
2014 1298 0.1040 0.0562 0.2234 48.8220 166.1402 410.0716 0.0021 0.0003 0.0005
2015 1257 0.1042 0.0573 0.2395 50.9093 165.6348 430.6476 0.0020 0.0003 0.0006
2016 1239 0.0944 0.0573 0.2228 51.8128 167.2155 441.3737 0.0018 0.0003 0.0005
2017 1261 0.0880 0.0587 0.2244 50.1649 165.6027 438.6542 0.0018 0.0004 0.0005
2018 1235 0.0883 0.0559 0.2267 51.0939 170.6680 451.8348 0.0017 0.0003 0.0005
2019 1261 0.0991 0.0397 0.2395 50.5337 164.0317 446.4941 0.0020 0.0002 0.0005

??Dette ferdig??

Nasjonalt?? (Dette kan kaaaaaaaaaaaaaaaaaaaaaaanskje bli tatt vekk. Det ser vi etter kvart)

Pendling

De ulike kommunene og regionene har ulike behov, for at regionene skal utvikle seg er pendling et viktig begrep for å tiltrekke seg arbeidskraft. Veldig mange kommuner har for lite arbeidsplasser i forhold til antall arbeidende innbyggere, som vil si at de fleste er avhengige av pendlere. Pendling kan være til andre kommuner i samme region eller til andre regioner. Alle kommuner har kanskje ikke arbeidsplasser innen alle fagfelt, arbeidstakere er derfor avhengig av å pendler til andre kommuner for å finne relevant arbeid. Det samme gjelder dersom arbeidstaker har tilhørighet til en kommune, men det ikke finnes relevant arbeid da er han også nødt til å søke jobb i andre kommuner. Her kommer begrepene innpendling og utpendling inn, som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har innbyggere som kan jobbe innad i kommunen eller at de ikke har nok arbeidsplasser og innbyggerene er nødt til å søke jobb andre plasser. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.

Nedenfor vil vi først ta for oss regionen Haugalandet og Sunnhordland med Ullensvang, og se på disse regionene hver for seg. Så kommer en tabell som tar for seg disse regionene samlet. Vi ønsker først å skille disse to regionene for å se i hvilken kommune andelen av innpendling og utpendling er størst og minst. For så å se på pendlingen mellom regionene.

I radene sees pendling inn til kommunene. Nederste rad viser totalen av antall pendlere inn til den enkelte kommune. Her kan vi se en andel stillinger som er besatt av arbeidstakere fra andre kommuner i Haugalandsregionen.

I kolonnene ser man de som pendlere ut av hver enkelt kommune. Det vil si arbeidstakere som bor i en kommune, og som har arbeidsted i en annen kommune innenfor Hauglandsregionen.

De som er markert med gult er arbeidstakere som bor og jobber i samme kommune.

Hauglandsregionen:

Haugalandsregionen har 44119 arbeidsplasser, hvorav 13170 er pendlere.

Haugesund, Karmøy og Tysvær er de kommunene i regionen med høyest andel pendlere både når det gjelder inn- og utpendling. La oss se nærmere på Haugesund som har en stor del av arbeidstakerne i regionen. Det gjelder både når vi ser på innpendling, utpendling og de som bor og jobber i samme kommune. Ut ifra tabellen kan vi se at Haugesund har 11714 arbeidstakere som bor og jobber i kommunen. Fra Haugesund er det eksempelvis 1029 arbeidstakere som pendler til Tysvær og 2586 arbeidstakere som pendler til Karmøy. Til Sauda og Utsira er det en betydelig lavere andel som pendler. Grunnen til at det nok at det er mindre kommuner med færre arbeidsplasser. Mange av de som bor i distriktene som eksempelvis Sauda og Utsira jobber og bor i samme kommune. Vi kan se at i Sauda jobber og bor det 1789 arbeidstaker, mens de har 31 stykk som pendler inn til kommunen og 66 stykk som pendler ut av kommunen. Det kan være flere som pendler inn til og ut av kommunen fra andre regioner, men her ser vi tallene på de som pendler i Haugalandsregionen.

Vi vet at Haugesund er regionsentrum med sykehus og høgskole. Samtidig har Haugesund flere olje og sjøfartsnæringer. Det er sentralisert som betyr at det er grunnlag for et større jobbmarked. Det er årsaken til at Haugesund har mer innpendling enn de andre kommunene i regionen. Karmøy og Tysvær som ligger nærmest Haugesund har størst andel utpendling, også til Haugesund.

Sunnhordland

I Sunnhordlandsregionen er det 28275 arbeidstakere om har sin arbeidsplass, av disse er det 2575 som har sitt arbeid i en annen kommune enn den de bor i.

Som vi kan se er Stord den kommunen med flest arbeidstakere. Dette kan vi se i sammenheng med at Stord er som et sentrum for regionen. En del av de interkommunale samarbeidene har sine kontorer lokalisert på Stord. Stord har 7314 som både bor og arbeider innad i kommunen. Å av Stordabuen som pendler ut av kommunen er det flest som pendler til Bømlo og Fitjar. Dette gjelder også motsatt da Stord får flest innpendlere fra de samme kommunene. Stord og Ullensvang er de eneste kommunene som har flere som pendler inn enn ut.

I Etne er det ganske likt med inn og utpendlere da de har 66 som pendler ut og 61 som pendler inn til kommunen. Etne er også den kommunen som har minst arbeidere som driver med pendling.

Vi har valgt å ta med Ullensvang i Sunnhordlandsoversikten. Etne og Kvinnherad er begge nabokommuner til Ullensvang. Ullensvang har lite både inn og utpendling.

En samlet oversikt over Haugalandsregionen og Sunnhordlandsregionen

Vi har sett på inndelingene i de forskjellige regionene. Videre ønsker vi å se på regionene i en samlet tabell.

Vi har tidligere skrevet om at Haugalandsregionen har 13170 pendlere, mens Sunnhordlandsregionen og Ullensvang har 2575 pendlere. Om vi ser begge regionene samlet, øker antall pendlere med totalt 3311 arbeidstakere. Det vil si at det er 3311 stykker som pendler på tvers av regionene.

Utsira har ikke inn- eller utpendlere til Sunnhordland. Bortsett fra en person som pendler til Sveio har heller ikke Bokn utpendling til Sunnhordland.

Haugesund er den kommunen som har flest pendlere inn til kommunen. De ligger langt foran de andre kommunene når det er snakk om pendling inn til kommunene. Karmøy er den kommunen som har flest innbyggere som pendler ut av kommunen.

Videre kan man se på de systematiske forskjellene sett i forhold til sentralitet og tilgjengelighet i det lokale arbeidsmarkedet.

Haugesund, Karmøy og Stord er sentrale kommuner hvor det finnes en stor andel arbeidsplasser og tilgjengeligheten i arbeidsmarkedet er større enn i eksempelvis Sauda, Utsira, Tysnes eller Ullensvang. De sentraliserte kommunene har en fordel i forhold til å skape klynger, det med tanke på at når flere mennesker bosetter seg i samme område kan en dra nytte av kompetansen de innehar. Sauda, Utsira, Tysnes og Ullensvang er eksempler på kommuner i utkanten av regionene. De befinner seg såpass langt utenfor at de ikke vil dra nytte av sentralitet.

I figur 3 og 4 vises det at de siste 10 årene har Haugesund hatt en reduksjon i antall ansatte, men Karmøy, Vindafjord og Tysvær har hatt en markant økning i antall arbeidstakere. Det vi vet er at det har utviklet seg større næringsklynger utenfor Haugesund de siste årene som kan ha en sammenheng med økning i antall ansatte. Samtidig har oljebransjen i samme periode slitt med nedgangstider som påvirker både Haugesund og Stord. Disse kommunene har en del oljebaserte næringer og i de periodene oljemarkedet svinger vil arbeidsmarkedet vise markant nedgang i antall arbeidsplasser. Det vil også vise en betydelig økning i antall arbeidsplasser om det er oppgangstider. Oppgangstider i oljenæringen gir en økning av pendlere inn til kommuner som har virksomheter innenfor oljenæringen.

LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgbGlicmFyeShrYWJsZUV4dHJhKQogIH0pCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCBpbmNsdWRlID0gVFJVRSkKYGBgCgojIFJvbWxpZ2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyLCB2aXJrbmluZ2VyIGF2IGVrc29nZW5lIHNqb2trIGkgYmFzaXNzeXNzZWxzZXR0aW5nZW4sIG9nIGxva2FsZSBmb3Jza2plbGxlciBJIHN5c3NlbHNldHRpbmdzdmVrc3QuCgpJIGRlbm5lIG9wcGdhdmVuIHZpbCB2aSBzZSBww6UgbsOmcmluZ3NzdHJ1a3R1cmVyIHDDpSBIYXVnYWxhbmRldCwgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcuCgpQcm9ibGVtc3RpbGxpbmdlciBvZyBiZXJlZ25pbmdlciB2aSB2aWwgc2UgbsOmcm1lcmUgcMOlCgotICAgQmVza3JpdmUgc2l0dWFzam9uZW4gc2xpayBkZW4gZXIgZm9yIDIwMjAsIG9nIGZvciB1dHZpa2xpbmdlbiBvdmVyIHRpZC4KLSAgIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCi0gICBBbmRlbGVuIGF2IHN5c3NlbHNldHRpbmdlbiBpbm5lbmZvciBlbmtlbHRuw6ZyaW5nZXIsIG9nIHNhbW1lbmxpZ25lIHNpdHVhc2pvbmVuIG9nIHV0dmlrbGluZ2VuIGZvciBsb2thbGUga29tbXVuZXIgb2cgbG9rYWwgcmVnaW9uIG1lZCBkZXQgc29tIGdqZWxkZXIgZm9yIG5hc2pvbmVuIHNhbWxldC4KLSAgIEJlcmVnbmUgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyLCBvZyBmb3IgcmVnaW9uZW4oZSkgc2FtbGV0LgotICAgQmVyZWduZSB1bGlrZSBhZ2dyZWdlcmluZ3NuaXbDpWVyIGF2IG7DpnJpbmdlciBvZyBnZW9ncmFmaSwgaWRlbnRpZmlzZXIgbXVsaWdlIGtseW5nZXIgYmFzZXJ0IHDDpSB2ZXJkaWVuZSBmb3IgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZW5lLgotICAgR2rDuHJlIGVuIHZ1cmRlcmluZyBhdiBodm9yIGtvbnNlbnRyZXJ0L3NwcmVkdCBlbiBuw6ZyaW5nIGVyIGZvcmRlbHQgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBiYXNlcnQgcMOlIGJlcmVnbmluZ2VyIGF2IGRlbiByb21saWdlIEdpbmktaW5kZWtzZW4uCi0gICBWdXJkZXJlIG9tIHNhbW1lbmxpZ25pbmdzZ3J1bm5sYWdldCBiw7hyIHbDpnJlIHNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4sIGVsbGVyIHNhbWxldCBzeXNzZWxzZXR0aW5nIGF2IG5hc2pvbmVuLCBvZyBmaW5uZSB1dCBodmlsa2VuIHJvbGxlIGRldCBzcGlsbGVyIG9tIGVuIGJydWtlciByZWdpb25hbGUgZWxsZXIgbmFzam9uYWxlIGFuc2xhZyBmb3Igc2FtbGV0IHN5c3NlbHNldHRpbmcuCi0gICBGaW5uZSB1dCBvbSBuw6ZyaW5nc3N0cnVrdHVyZW4gaSByZWdpb25lbiBoYXIgYmxpdHQgbWVyIGVsbGVyIG1pbmRyZSBkaXZlcnNpZmlzZXJ0LCBtYW5nZm9sZGlnLCBvdmVyIHRpZC4KLSAgIEJlcmVnbmUgZW4gcmVnaW9uYWwgbWFuZ2ZvbGQtaW5kZWtzIG9nIGZpbm5lIHV0IGh2b3JkYW4gdmVyZGllbmUgcMOlIGVuIHNsaWsgaW5kZWtzIGVyIGVuZHJldCBvdmVyIHRpZC4KLSAgIFZ1cmRlcmUgb20gc3lzc2Vsc2V0dGluZ3NhbmRlbGVuZSBza2FsIHNhbW1lbmxpZ25lcyBtZWQgbmFzam9uYWxlIGVsbGVyIHJlZ2lvbmFsZSBhbmRlbGVyIGZvciBkZSB1bGlrZSBuw6ZyaW5nZW5lCi0gICBHamVudGEgYmVyZWduaW5nZXIgZm9yIGFuZGVsZXIgYXYgYXJiZWlkc3Rha2VyZSBpIHVsaWtlIG7DpnJpbmdlciwgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIsIGRlbiByb21saWdlIEdpbmktIGtvZWZmaXNpZW50ZW4gb2cgbcOlbGV0IGZvciBtYW5nZm9sZCBhdiBuw6ZyaW5nZXIsIG1lZCB1dGdhbmdzcHVua3QgaSBkYXRhIHNwZXNpZmlzZXJ0IGV0dGVyIGFyYmVpZHN0YWtlcm5lcyBib3N0ZWQuCi0gICBTYW1tZW5saWduZSByZXN1bHRhdGVuZSBmb3IgZGF0YSBldHRlciBhcmJlaWRzc3RlZCwgb2cga29tbWVudGVyIGh2aWxrZW4gaW5mb3JtYXNqb24gcmVzdWx0YXRlbmUgZ2lyIG9tIHJvbWxpZyBtb2JpbGl0ZXQgaSBhcmJlaWRzbWFya2VkZXQuCi0gICBHaSBlbiBrb3J0IG92ZXJzaWt0IG92ZXIgcGVuZGxlcnN0csO4bW1lciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4KLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgbWVkIGJvc3RlZCBpIGVuIGtvbW11bmUgc29tIGhhciBhcmJlaWRzc3RlZCBpIGFuZHJlIGtvbW11bmVyLCBvZyBnasO4ciBkZXQgc2FtbWUgZm9yIGFuZGVsZW4gYXYgam9iYmVuZSBpIGVuIGtvbW11bmUgc29tIGVyIGJlc2F0dCBhdiBhcmJlaWRzdGFrZXJlIGZyYSBhbmRyZSBrb21tdW5lci4KLSAgIERpc2t1dGVyZSBmb3Jza2plbGxlciBtZWxsb20ga29tbXVuZW5lIGkgcmVnaW9uZW4sIG9nIGRyw7hmdCB1dHZpa2xpbmdlbiBvdmVyIHRpZCBmb3IgdWxpa2Uga29tbXVuZXIKLSAgIEJlcmVnbmUgb2cgcHJlc2VudGVyZSBhbmRlbGVuIGF2IGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaW5uZW5mb3Igc2FtbWUga29tbXVuZS4gU2Ugb20gZGV0IGVyIHN5c3RlbWF0aXNrZSBmb3Jza2plbGxlciBzZXR0IGkgZm9yaG9sZCB0aWwgc2VudHJhbGl0ZXQgb2cgdGlsZ2plbmdlbGlnaGV0IGkgZGV0IGxva2FsZSBhcmJlaWRzbWFya2VkZXQuIE9nIG9tIGRldCBlciBiZXN0ZW10ZSB0cmVuZGVyIGkgdXR2aWtsaW5nZW4gZm9yIHVsaWtlIGtvbW11bmVyLgotICAgQnJ1a2UgYmVyZWduaW5nZW5lIGF2IGxva2FsaXNlcmluZ2t2b3RpZW50ZXIgdGlsIMOlIGRlbGUgbsOmcmluZ2VuZSBpbm4gaSBsb2thbC0gb2cgYmFzaXNuw6ZyaW5nZXIKLSAgIEZvcm11bGVyZSBlbiDDuGtvbm9taXNrIGJhc2Vtb2RlbGwgb2cgYmVyZWduZSDDuGtvbm9taXNrZSBiYXNlbXVsaXBsaWthdG9yZXIgZm9yIGVua2VsdGtvbW11bmVyIG9nIHJlZ2lvbihlcikuCi0gICBWdXJkZXJlIGxva2FsZSB2aXJrbmluZ2VyIGF2IGFsdGVybmF0aXZlIGxva2FsaXNlcmluZ2VyIGkgT2RkYSwgSHVzbmVzIG9nIExlaXJ2aWsKLSAgIERyw7hmdGUgdmlya25pbmdlciBhdiBldCBzbGlrdCBwb3NpdGl2dCBla3NvZ2VudCBzam9rayBmb3IgZGVuIGxva2FsZSDDuGtvbm9taWVuIGdqZW5ub20gYnJ1ayBhdiBlbiBiYXNlbW9kZWxsCi0gICBGaW5uZSB1dCBodm9yZGFuIHZpcmtuaW5nZW5lIGV2ZW50dWVsdCBzcHJlcyB0aWwgYW5kcmUga29tbXVuZXIgaSByZWdpb25lbiBvZyBodm9yZGFuIGVuIGthbiBicnVrZSBkYXRhIGZvciBwZW5kbGVzdHLDuG1tZXIgdGlsIMOlIHByZWRpa2VyZSB2aXJrbmluZ2VyIHDDpSBzeXNzZWxzZXR0aW5nZW4gaSB1bGlrZSBrb21tdW5lci4KLSAgIFNhbW1lbmxpZ25lIGRpc3NlIHByZWRpa3Nqb25lbmUgbWVkIGRlIHZpIGbDpXIgbsOlciB2aSBnamVubm9tZsO4cmVyIGFuYWx5c2VuIHDDpSByZWdpb25hbHQgbml2w6UuCi0gICBHaSBlbiBzaGlmdC1zaGFyZSBhbmFseXNlIGkgZW4gZGlza3Vzam9uIGF2IGZvcnNramVsbGVyIGkgdmVrc3QgZm9yIGVrc2VtcGVsIG1lbGxvbSBpbmRyZSwgbWlkdHJlIG9nIHl0cmUgZGVsZXIgYXYgcmVnaW9uZW4sIGVsbGVyIGV2ZW50dWVsdCBvbXLDpWRlci9rb21tdW5lciBzb20gaGFyIGhhdHQgc3Rlcmsgb2cgc3ZhayBiZWZvbGtuaW5nc3V0dmlrbGluZy4KCiMjIE92ZXJzaWt0IG92ZXIgYmVmb2xrbmluZ2VuZSBpIHJlZ2lvbmVuZQoKIyMjIEhhdWdhbGFuZGV0CgpIYXVnYWxhbmRldCBiZXN0w6VyIGF2IGtvbW11bmVuZSBCb2tuICg4NTIpLCBIYXVnZXN1bmQgKDM3MzU3KSwgS2FybcO4eSAoNDIxODYpLCBTYXVkYSAoNDU5NSksIFR5c3bDpnIoMTEwNjUpLCBVdHNpcmEoMTk4KSBvZyBWaW5kYWZqb3JkKDg3MTQpLgp0aWxzYW1tZW4gYm9yIGRldCAxMDQ5NjcgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KaSB0aWRzcGVyaW9kZW4gdmkgaGFyIGhlbnRldCBpbm4gZGF0YSBoYXIgZGV0IHZlcnQga29tbXVuZXNhbW1lbnNsw6VpbmcgaSBkZW5uZSByZWdpb25lbi4KRGEgYmxlIMOYbGVuIG9nIHZpbmRhZmpvcmQgc2zDpXR0IGkgc2FtbWVuIHRpbCBlbiBrb21tdW5lIChodm9yZGFuIGhhciB2aSB0YXR0IGhlbnN5biB0aWwgZGV0dGU/Pz8pCgojIyMgU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmcKClN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nIGJlc3TDpXIgYXYga29tbXVuZW5lIELDuG1sbygxMTk1NyksIEV0bmUoNDA2MiksIEZpdGphcigzMTg5KSwgS3Zpbm5oZXJhZCgxMzA3MSksIFN0b3JkKDE4NzU5KSwgU3ZlaW8oNTc2NiksIFR5c25lcygyODY5KSBvZyBVbGxlbnN2YW5nKDExMDQ4KS4KVGlsc2FtbWVuIGJvciBkZXQgNzA3MjEgcGVyc29uZXIgaSBkZW5uZSByZWdpb25lbi4KClRhbGxlbmUgZXIgaGVudGV0IGZyYSBTU0IgMDkuMDEuMjEgKDxodHRwczovL3d3dy5zc2Iubm8vc3RhdGJhbmsvdGFibGUvMDEyMjMvdGFibGVWaWV3TGF5b3V0MS8+KSBnamVsZGVyIGZvciA0IGt2YXJ0YWwgMjAyMC4KCiJGb3JrbGFyIGxpdHQgb20gZGUgZm9yc2tqZWxsaWdlIG7DpnJpbmdlbmUiLi4uLi4gCgpgYGB7ciBjc3ZfZmlsZXJ9CnN5c3NlbF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYXJiIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zdW5fYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzeXNzZWxfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL3N5c3NlbF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGxkX2JvcyA8LSByZWFkX2NzdigiRGF0YS9obGRfYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoYXJfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hhcl9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGdsX1BlbmRsaW5nIDwtIHJlYWRfY3N2KCJEYXRhL2hnbF9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmBgYAoKIyAxIFN5c3NlbHNldHRpbmcgaSB1bGlrZSBuw6ZyaW5nZXIsIGV0dGVyIGFyYmVpZHNzdGVkCgojIyBIYXVnYWxhbmRldAoKRsO4cnN0ZSByZWdpb25lbiB2aSB2ZWxnZXIgw6Ugc2UgcMOlIGVyIEhhdWdhbGFuZGV0LgpIZXIgw7huc2tlciB2aSDDpSBzZSBww6UgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAsIGF2IGFudGFsbCBhbnNhdHRlIGkgc2luIGhlbGhldCBpIHJlZ2lvbmVuLCBzYW10IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZS4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTogSGF1Z2FsYW5kZXQiKSsKICB5bGFiKCJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpJIDIwMjAgZXIgZGV0IGkgdW5kZXJrYW50IGF2IDUwIDAwMCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIEhhdWdhbGFuZGV0LgpBdiBGaWcuCjEgc2VyIHZpIGF0IEhhdWdhbGFuZGV0IGZpa2sgZW4gbmVkZ2FuZyBpIGFudGFsbCBhbnNhdHRlIGkgMjAxNSBvZyAyMDE2LgpJIDIwMTcgb2cgMjAxOCBibGUgZGV0IHZla3N0LCBmcmVtIHRpbCBkZXQgc251ZGRlIGkgMjAxOSBpZ2plbi4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjogSGF1Z2FsYW5kZXQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpJIEZpZy4KMiBzZXIgdmkgYXQgZmxlcmUgYXYga29tbXVuZW5lIHDDpSBIYXVnYWxhbmRldCBoYXIgaGF0dCBsaXRlbiBhcmJlaWRzcGxhc3N2ZWtzdCwgbWVkIHVubnRhayBhdiBUeXN2w6ZyLCBWaW5kYWZqb3JkIG9nIEthcm3DuHkgaSBkZW4gc2lzdGUgdGnDpXJzcGVyaW9kZW4uClZpIHNlciBkZXR0ZSBtZXIgdHlkZWxpZyBww6UgZmlnLgozIG9nIDQuCgpgYGB7ciBobGRfYXJiX2xvbmd9CmhsZF9hcmJfbG9uZyA8LSBzeXNzZWxfYXJiICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXVnYWxhbmRldF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzRfTWluc3RlX0FyYmVpZHN0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA0OiBIYXVnYWxhbmRldDogQm9rbiwgU2F1ZGEgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpGaWd1ciAzIG9nIDQgdmlzZXIgdXR2aWtsaW5nZW4gYXYgZGV0IHRvdGFsZSBhbnRhbGwgYW5zYXR0ZSBpIGFsbGUgbsOmcmluZ2VyIHDDpSBrb21tdW5hbHQgbml2w6UsIGlubmVuZm9yIEhhdWdhbGFuZC1yZWdpb25lbi4KCkkgZGlzc2UgZmlndXJlbmUsIHPDpSBzZXIgdmkgdHlkZWxpZyBhdCBIYXVnZXN1bmQgaGFyIGhhdHQgcmVkdWtzam9uIGkgYW50YWxsIGFuc2F0dGUgdG90YWx0IHNldHQsIG1lbnMgS2FybcO4eSwgVmluZGFmam9yZCBvZyBUeXN2w6ZyIGhhciBoYXR0IGVuIG1hcmthbnQgdmVrc3QgZGUgc2lzdGUgdGkgw6VyZW5lLgpTaWRlbiBIYXVnZXN1bmQgaGFyIGZsZXN0IGFyYmVpZHNwbGFzc2VyIGJldHlyIHV0dmlrbGluZ2VuIGkgSGF1Z2VzdW5kIG15ZSBmb3IgZGUgc2FtbGVkZSB0YWxsZW5lLgoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDU6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CmhsZF9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQm9rbiIsICJTYXVkYSIsICJUeXN2w6ZyIiwgIlV0c2lyYSIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDY6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgNSBvZyA2IHZpc2VyIHV0dmlrbGluZ2VuIGF2IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIEhhdWdhbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZSBuaXbDpS4KClZpIHNlciBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsIEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIHV0Z2rDuHIgbsOmcmluZ2VuZSBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIG9nIEluZHVzdHJpIGRlIHN0w7hyc3RlLgpIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIGhhciB2b2tzdCBqZXZudCBvZyB0cnV0dCBkZSBzaXN0ZSB0acOlcmVuZSwgbWVucyBhbnRhbGwgYW5zYXR0ZSBpIGluZHVzdHJpbsOmcmluZ2VuIGhhciB2YXJpZXJ0IGZyYSBrb21tdW5lIHRpbCBrb21tdW5lLgpJIEhhdWdhbGFuZGV0IHV0Z2rDuHIgcHJpbcOmcm7DpnJpbmdlciAoam9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlKSBlbiBzdMO4cnJlIGFuZGVsLCBlbm4gaG9zIEthcm3DuHkgb2cgSGF1Z2VzdW5kIGh2b3IgcHJpbcOmcm7DpnJpbmdlbmUga3VuIHV0Z2rDuHJlIGVuIGxpdGVuIGFuZGVsLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZXIgcmVsYXRpdnQgc3RvcmUga29tbXVuZXZpc2UgZm9yc2tqZWxsZXIgaSBuw6ZyaW5nc3N0cnVrdHVyZW4uClJvZ2FsYW5kIGhhciBlbiBmb3Job2xkc3ZpcyBlbnNpZGlnIG7DpnJpbmdzc3RydWt0dXIsIG9samUgb2cgZ2FzcyBlciBkb21pbmVyZW5kZS4KRnlsa2V0IGVyIHN1dmVyZW50IGRvbWluZXJlbmRlIGZvciBmb3NzaWwgZW5lcmdpLgpEZSBoYXIgZm9yIMO4dnJpZyBkZSBzaXN0ZSDDpXJlbmUgc2F0c2V0IHDDpSBldCBlbiBtZXIgZGlmZmVyZW5zaWVydCBuw6ZyaW5nc3N0cnVrdHVyIG9nIG7DpnJpbmdzbGl2IHZlZCDDpSBzYXRzZSBww6UgaGVsc2UsIElLVCBvZyBmb3JueWJhciBlbmVyZ2kuCgpJIHbDpXJlIG1vZGVsbGVyLCBlciBzYXRzaW5nZW4gcMOlIGhlbHNlIGRlbiBtZXN0IHR5ZGVsaWdlLgpBdiByZW50IHRla25pc2tlIGdydW5uZXIgZXIgZGV0IHZhbnNrZWxpZyDDpSBzZSB1dHZpa2xpbmdlbiBpIGVua2VsdGUgbsOmcmluZ2VyIHNvbSB1dGdqw7hyIHNtw6UgYW5kZWxlciwgcMOlIGdydW5uIGF2IHNrYWxhZW4gc29tIGVyIGJlbnl0dGV0LgpUaWwgdHJvc3MgZm9yIGRldHRlLCBrYW4gbWFuIHNlIGF0IG7DpnJpbmdzc3RydWt0dXJlbiBpIHJlZ2lvbmVuIHNhbWxldCBnZW5lcmVsdCBzZXR0IGhhciBlbmRyZXQgc2VnIGxpdGUuCgpSb2dhbGFuZCBoYXIgZ29kZSBqb3JkYnJ1a3NtdWxpZ2hldGVyLCBtZW4gaSBGaWcuCjI6IEhhdWdhbGFuZGV0IHNlciB2aSBlbiBuZWRnYW5nIGkgc3lzc2Vsc2V0dGluZ2VuIGRlIHNpc3RlIHRpw6VyZW5lLCBtZW5zIGRldCBlciBlbiBtYXJnaW5hbCDDuGtuaW5nIGkgU3VubmhvcmRhbGFuZCwgamYuCkZpZyA5LgpJIEZpZy4KMTI6IHNlciB2aSBhdCBUeXNuZXMgaGFyIGhhdHQgZW4gbWFya2FudCDDuGtuaW5nIGkgcHJpbcOmcm7DpnJpbmdlbiwgcmVsYXRpdnQgc2V0dC4KClVuaXZlcnNpdGV0cy0gb2cgaMO4Z3Nrb2xlc2VrdG9yZW4gZXIgbGl0ZW4gaSBSb2dhbGFuZCwgb2cgZGVuIGJlc3TDpXIgZm9yIGRldCBmw7hyc3RlIGF2IFVuaXZlcnNpdGV0ZXQgaSBTdGF2YW5nZXIgKFVpUykgb2cgSMO4Z3NrdWxlbiBww6UgVmVzdGxhbmRldCAoSFZMKSBtZWQgY2FtcHVzIEhhdWdlc3VuZC4KCkhhdWdhbGFuZCBWZWtzdCwgc29tIGVyIGVpZ2QvZHJldmV0IGF2IEhhdWdhbGFuZHNyZWdpb25lbiBlciBpIHNwaXNzZW4gcMOlIMOlIGxlZ2dlIHRpbCByZXR0ZSBmb3Igw6UgZXRhYmxlcmUgbnkgaW5kdXN0cmkgc2FtdCBhbmRyZSBhcmJlaWRzcGxhc3NlciBpIHJlZ2lvbmVuLgoKSSBoZWxzZXNla3RvcmVuIGVyIFN0YXZhbmdlciB1bml2ZXJzaXRldHNzeWtlaHVzIChTdVMpIHNlbnRyYWx0LgoKIyMgU3VubmhvcmRsYW5kCgpWaWRlcmUgw7huc2tlciB2aSDDpSBzZSBww6UgZGVuIHNhbW1lIHV0dmlrbGluZ2VuLCBtZW4gZGVubmUgZ2FuZ2VuIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNzogU3VubmhvcmRhbGFuZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKSGVyIHZpc2VyIGZpZ3VyIDcgdXR2aWtsaW5nZW4gdGlsIGRlbiB0b3RhbGUgc3VtbWVuIGF2IGFuc2F0dGUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuClN1bm5ob3JkYWxhbmQgaGFyIGkgMjAyMCBpIHVuZGVya2FudCBhdiAyNSA1MDAgYW5zYXR0ZS4KVmkgc2VyIHV0IGlmcsOlIGZpZ3VyZW4gYXQgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGhhZGRlIGVpbiBtYXJrYW50IHZla3N0IGlmcsOlIDIwMDggdGlsIDIwMTQgbWVkIHBlcmlvZGFyIG1lZCBzdmFrIG5lZGdhbmcuCkZyYSAyMDE0IGhhciBkZXQgdsOmcnQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFudGFsbCBhbnNhdHRlLgoKYGBge3IgQXJiZWlkc3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiRmlnLiA4OiBTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpGaWd1ciA4IHZpc2VyIHV0dmlrbGluZ2VuIGF2IHRvdGFsdCBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIHDDpSBrb21tdW5lbml2w6UgaSBoZWxlIHJlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLgpEZW5uZSBmaWd1cmVuIGdpciBvc3MgZW4gb3ZlcnNpa3QsIG1lbiBlciBpa2tlIGhlaWx0IGJydWtlcnZlbm5lbGlnLgpWaSBsYWdlciBkZXJtZWQgZW4gbWVyIG92ZXJzaWt0bGlnIGZpZ3VyLCBqZi4KZmlndXIgOSAmIDEwLgoKYGBge3Igc3VuX2FyYl9sb25nfQpzdW5fYXJiX2xvbmcgPC0gc3lzc2VsX2FyYiAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiS3Zpbm5oZXJhZCIsICJTdG9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiA5OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJGaXRqYXIiLCAiU3ZlaW8iLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEwOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGhhciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAyKSkgKyAKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpCmBgYAoKVmkgc2VyIGhlciB1dCBpZnJhIGZpZ3VyIDkgb2cgMTAgdXR2aWtsaW5nZW4gZm9yIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmQgdG90YWx0IHNldHQsIG9nIGhlciBzZXIgdmkgbXllIHR5ZGxpZ2VyZSB1dHZpa2xpbmdlbiBmcmEgMjAwOCB0aWwgMjAyMC4KRW4ga2FuIHNlIGhlciBhdCBLdmlubmhlcmFkLCBFdG5lIG9nIEZpdGphciBoYXIgaGF0dCBlbiByZWR1a3Nqb24gaSB0b3RhbHQgYW5zYXR0ZSwgbWVucyBUeXNuZXMgb2cgU3ZlaW8gaGFyIGhhdHQgZWluIGtyYWZ0aWcgdmVrc3QuCkVuIGludGVyZXNzYW50IGJlbWVya2luZyBlciBTdG9yZCBpIDIwMTQgb2cgS3Zpbm5oZXJhZCBmcmEgMjAwOCB0aWwgMjAxNy4KCkZvciDDpSBmw6UgZXQgYmVkcmUgb3ZlcnNpa3Qgb3ZlciB1dHZpa2xpbmdlbiBpIGtvbW11bmVuIMO4bnNrZXIgdmkgw6Ugc2UgcMOlIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIga29tbXVuZS4KCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9BcmJlaWRzc3RlZH0Kc3VuX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDExOiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiRXRuZSIsICJTdmVpbyIsICJGaXRqYXIiLCAiVHlzbmVzIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTI6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0amFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgMTEgb2cgMTIgdmlzZXIgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lIGkgaHZlciBlbmtlbHQga29tbXVuZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4KCkVuIHNlciB1dCBpZnJhIGZpZ3VyIDExIGF0IGkgZGUgdHJlIHN0w7hyc3RlIGtvbW11bmVuZSwgKkLDuG1sbyosICpLdmlubmhlcmFkKiBvZyAqU3RvcmQqIHPDpSBoYXIgZGUgYWxsZSBoYXR0IGVuIHJlZHVrc2pvbiBpIGluZHVzdHJpZW4sIHNhbXRpZGlnIHNvbSBkZSBoYXIgaGF0dCBlbiB2ZWtzdCBpIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIuClR5c25lcyBoYXIgdsOmcnQgc3RhYmlsIG7DpXIgZGV0IGtvbW1lciB0aWwgaW5kdXN0cmksIG1lbiBoYXIgc2V0dCBlaW4gbWFya2FudCB2ZWtzdCBpIHByaW3DpnJuw6ZyaW5nZW4gKEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZSkuCgojIyMgU3lzc2Vsc2V0dGluZ3N1dHZpa2xpbmdlbiBmb3IgdWxpa2UgbsOmcmluZ2VyIGkgdWxpa2Uga29tbXVuZXIgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldC4KCkRldCBmw7hyc3RlIGJlbWVya2Vsc2VzdmVyZGlnZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBlciBkZW4gbWFya2FudGUgcmVkdWtzam9uZW4gaSBpbmR1c3RyaSBpIFN0b3JkIGtvbW11bmUgaSAyMDE0LCBzYW10IEt2aW5uaGVyYWQgZnJhIDIwMDguCkRldHRlIHN0ZW1tZXIgb3ZlcmVucyBtZWQgdG8gaGVuZGVsc2VyLgpEZW4gZsO4cnN0ZSBlciBvbGpla25la2tlbiBpIDIwMTQgc29tIG1lZGbDuHJ0ZSBhdCBibC5hLgpBa2VyIFN0b3JkIEFTIHNvbSBlciBhdmhlbmdpZyBhdiBPbGplLWluZHVzdHJpZW4gbcOldHRlIHBlcm1pdGVyZS4KClN0b3JkIGVyIGVuIGtvbW11bmUgc29tIGhhciBteWUgb2Zmc2hvcmUgaW5kdXN0cmkuCkkgMjAwOC8yMDA5IHPDpSBzdGVuZ3RlIFPDuHItTm9yZ2UgQWx1bWluaXVtICJCLUhhbGxlbiIgc29tIG1lZGbDuHJ0ZSA1MCUgcmVkdWtzam9uIGkgcHJvZHVrc2pvbiwgb2cgZGVybWVkIGFuc2F0dGUuCkludGVyZXNzYW50IMOlIGJlbWVya2UgYXQgaSBLdmlubmhlcmFkIHPDpSBlciBhbnRhbGwgaW5kdXN0cmlhcmJlaWRlcmUgcmVkdXNlcnQgc2FtdGlkaWcgc29tIGFudGFsbCBhbnNhdHRlIGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgw7hrdC4KQsO4bWxvIGhhciBvZ3PDpSBzZXR0IGVuIHN0YWJpbCByZWR1a3Nqb24gaSBhbnNhdHRlIGlubmVuIGluZHVzdHJpLCBzYW10IHZla3N0IGkgSGVsc2UtIG9nIFNvc2lhbGV0amVuZXN0ZXIgZnJlbSB0aWwgMjAxOC4KClNlciBlbiBww6UgaGVsZSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gaSBzaW4gaGVsaGV0LCBzw6Ugc2VyIHZpIGVuIHN2w6ZydCB0eWRlbGlnIHZla3N0IGlubmVuIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyLCBvZyByZWR1a3Nqb24gaW5uZW4gaW5kdXN0cmkgaSBoZWxlIHJlZ2lvbmVuLgpLdmlubmhlcmFkLCBUeXNuZXMgb2cgRml0amFyIGhhciBvcHBsZXZkIGVpbiBtYXJrYW50IHZla3N0IGlubmVuIHByaW3DpnJuw6ZyaW5nLgoqKkthbiBkZXQgdmVyZSBlaW4gZ3J1bm4gdGlsIGRldHRlIHNvbSBidXJkZSBkaXNrdXRlcmFzdD8/KioKCiMgRm9ydHNldHQgSGVyIChPQSwgS0gpCgojIyBIYXJkYW5nZXIKClRpbCBzbHV0dCBtw6UgdmkgZ2plcmUgZGV0IHNhbW1lIG1lZCAqSGFyZGFuZ2VyKgoKSSBoZW5ob2xkIHRpbCBvcHBnYXZlbnMga3JhdiB0aWwgYmV0cmFrdGVyIHZpICpIYXJkYW5nZXIqIGbDuHIgMjAxOSBzb20gVWxsZW5zdmFuZy0gb2cgT2RkYSBrb21tdW5lIHNvbSB0byBzZXBhcmVydGUga29tbXVuZXIuCmkgMjAyMCBzw6UgYmxlIFVsbGVuc3ZhbmcsIE9kZGEgb2cgSm9uZGFsIHNsw6V0dCBzYW1tZW4gdGlsIFVsbGVuc3ZhbmcuCkRldHRlIGZvcmtsYXJlciBkZW4gdm9sZHNvbW1lIMO4a25pbmdlbiBpIHN5c3NlbHNldHRpbmcgaSByZWdpb25lbiB2ZWQgdGlkc3B1bmt0ZXQgZm9yIGtvbW11bmVzYW1tZW5zbMOlaW5nLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGFyZGFuZ2VyXzF9Cmhhcl9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKClVsbGVuc3Zhbmcga29tbXVuZSBoYXIgc3RvciBrcmFmdHByb2R1a3Nqb24gb2cgaG92ZWRuw6ZyaW5nZW4gZXIgaW5kdXN0cmkuCk1ham9yaXRldGVuIGF2IGtyYWZ0cHJvZHVrc2pvbmVuIGZvcmVnw6VyIGkgdGlkbGlnZXJlIE9kZGEuCk9kZGEgZXIgZXQgZW5zaWRpZyBpbmR1c3RyaXN0ZWQsIG1lbiBoYXIgb2dzw6UgZW4gbWFyaXRpbSBuw6ZyaW5nIGkgdGlsbGVnZy4KSSBmaWd1ciAxNiBzZXIgdmkgYXQgaW5kdXN0cmluw6ZyaW5nZW4gdXRnasO4ciBlbiBiZXRyYWt0ZWxpZyBzdMO4cnJlIGFuZGVsIGF2IHN5c3NlbHNldHRpbmdlbiBpIGhlci4KSW5kdXN0cmluw6ZyaW5nZW4gZXIgb2dzw6Ugb21mYXR0ZXQgb2cgYnlnZy0gb2cgYW5sZWdnc3Zpcmtzb21oZXQuClDDpSBtb3RzYXR0IHNpZGUgZXIgam9yZGJydWssIGhlbHNlLSBvZyBzb3NpYWx0amVuZXN0ZXIgZG9taW5lcmVuZGUgaSBVbGxlbnN2YW5nLgoKKipHZW5lcmVsdCBvbSBVbGxlbnN2YW5nIGtvbW11bmUqKgoKVWxsZW5zdmFuZyBrb21tdW5lIChtZWQgT2RkYSkgaGFyIGhhdHQgZW4gamV2biBvZyBuZWdhdGl2IGJlZm9sa25pbmdzdmVrc3QgaSBtYW5nZSB0acOlci4KRGV0IGdqZW5zcGVpbGVzIGlra2UgdHlkZWxpZyBpIHbDpXJlIG1vZGVsbGVyIHDDpSBncnVubiBhdiBza2FsYWVuIHNvbSBlciBicnVrdC4KSSB0aWxsZWdnIGhhciB2aSBpa2tlIGhlbnN5bnRhdHQgaW5udmFuZHJlbmRlIGFyYmVpZGVyZSwgZWxsZXIgbWlkbGVydGlkaWdlIGZyYWZseXR0ZWRlIHNvbSBmb3IgZWtzZW1wZWwgc3R1ZGVudGVyLgoKIyAyCgpGaW5uZXIgbG9rYWxpc2VyaW5nc2t2b3RpZW50ZXIgZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyLCBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0CgpgYGB7cn0KI29yZG5lciBldHRlciBrb21tdW5lbmF2biBvZyDDpXIKdG1wIDwtIHN5c3NlbF9ib3MKYGBgCgpgYGB7cn0KaGF1MjAgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGFhciA9PSAiMjAyMCIsIGtuYXZuID09ICJIYXVnZXN1bmQiKQpgYGAKCmBgYHtyfQooaGF1MjAkSW5kdXN0cmkvaGF1MjAkYEFsbGUgTsOmcmluZ2VyYCkKMTkwNS8xODEzNwpgYGAKCmBgYHtyfQpscV9zeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShFaXJfRXJfaW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbmFzam9uYWx0X2Jvc3RlZCA8LSByZWFkX2V4Y2VsKCJEYXRhL25hc2pvbmFsdF9ib3N0ZWQueGxzeCIpCmBgYAoKYGBge3J9Cm5hc2pvbmFsdF9ib3N0ZWQgPC0gbmFzam9uYWx0X2Jvc3RlZCAlPiUgCiAgbXV0YXRlKEVpbl9Fbl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpbl9Fbl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWluX0VuX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApCmBgYAoKCmBgYHtyfQpMUV9ib3NfSm9yZGJydWsgPC0gbHFfc3lzc2VsX2JvcyU+JSAKICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0pvcmRicnVrKSAlPiUgCiAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9ib3N0ZWQsIGFhciwgRWluX0VuX0pvcmRicnVrKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAogIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9Kb3JkYnJ1ay9FaW5fRW5fSm9yZGJydWsKICApCgpMUV9ib3NfSW5kdXN0cmkgPC0gbHFfc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9pbmR1c3RyaSkgJT4lIAogIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAogIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYm9zdGVkLCBhYXIsIEVpbl9Fbl9JbmR1c3RyaSksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfaW5kdXN0cmkvRWluX0VuX0luZHVzdHJpKQoKCkxRX2Jvc19VbmRlcnZpc25pbmcgPC0gbHFfc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9VbmRlcnZpc25pbmcpICU+JSAKICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2Jvc3RlZCwgYWFyLCBFaW5fRW5fVW5kZXJ2aXNuaW5nKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAogIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZykKCgpMUV9ib3NfSGVsc2UgPC0gbHFfc3lzc2VsX2JvcyAlPiUgCiAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9IZWxzZSkgJT4lIAogIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAogIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYm9zdGVkLCBhYXIsIEVpbl9Fbl9IZWxzZSksIGJ5ID0gYygiYWFyIikpICU+JSAKICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfSGVsc2UvRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpzeXNzZWxfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIG11dGF0ZShMUV9ib3NfSm9yZGJydWsgPSBMUV9ib3NfSm9yZGJydWskYW5kZWwsCiAgICAgICAgIExRX2Jvc19JbmR1c3RyaSA9IExRX2Jvc19JbmR1c3RyaSRhbmRlbCwKICAgICAgICAgTFFfYm9zX1VuZGVydmlzbmluZyA9IExRX2Jvc19VbmRlcnZpc25pbmckYW5kZWwsCiAgICAgICAgIExRX2Jvc19IZWxzZSA9IExRX2Jvc19IZWxzZSRhbmRlbCkKYGBgCgpgYGB7cn0KTFFfYm9zIDwtIHN5c3NlbF9ib3MgJT4lIAogIHNlbGVjdChhYXIsIGtuYXZuLCBMUV9ib3NfSm9yZGJydWssIExRX2Jvc19JbmR1c3RyaSwgTFFfYm9zX1VuZGVydmlzbmluZywgTFFfYm9zX0hlbHNlKQpgYGAKCmBgYHtyfQpMUV9ib3NbaXMubmEoTFFfYm9zKV0gPSAwCmBgYAoKCgpGb3IgcmVnaW9uIEhhdWdhbGFuZDoKCmBgYHtyfQpobGRfYm9zX0xRIDwtIGhsZF9ib3MgJT4lIAogIG11dGF0ZShFaXJfRXJfaW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSm9yZGJydWsgPSBgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKQpgYGAKCmBgYHtyfQpMUWluZHVzdHJpX2hsZCA8LSBhc190aWJibGUoaGxkX2Jvc19MUSRFaXJfRXJfaW5kdXN0cmkvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSW5kdXN0cmkpCkxRam9yZGJydWtfaGxkIDwtIGFzX3RpYmJsZShobGRfYm9zX0xRJEVpcl9Fcl9Kb3JkYnJ1ay9uYXNqb25hbHRfYm9zdGVkJEVpbl9Fbl9Kb3JkYnJ1aykKTFF1bmRlcnZpc25pbmdfaGxkIDwtIGFzX3RpYmJsZShobGRfYm9zX0xRJEVpcl9Fcl9VbmRlcnZpc25pbmcvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fVW5kZXJ2aXNuaW5nKQpMUWhlbHNlX2hsZCA8LSBhc190aWJibGUoaGxkX2Jvc19MUSRFaXJfRXJfSGVsc2UvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSGVsc2UpCmBgYAoKYGBge3J9CmhsZF9ib3NfTFEgPC0gaGxkX2Jvc19MUSAlPiUgCiAgbXV0YXRlKExRaW5kdXN0cmkgPSBMUWluZHVzdHJpX2hsZCR2YWx1ZSwKICAgICAgICAgTFFqb3JkYnJ1ayA9IExRam9yZGJydWtfaGxkJHZhbHVlLAogICAgICAgICBMUXVuZGVydmlzbmluZyA9IExRdW5kZXJ2aXNuaW5nX2hsZCR2YWx1ZSwKICAgICAgICAgTFFoZWxzZSA9IExRaGVsc2VfaGxkJHZhbHVlKSAlPiUgCiAgc2VsZWN0KMOFciwgTFFpbmR1c3RyaSwgTFFqb3JkYnJ1aywgTFF1bmRlcnZpc25pbmcsIExRaGVsc2UpCmBgYAoKRm9yIFN1bm5ob3JkYWxhbmQ6CgpgYGB7cn0Kc3VuX2Jvc19MUSA8LSBzdW5fYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KTFFpbmR1c3RyaV9zdW4gPC0gYXNfdGliYmxlKHN1bl9ib3NfTFEkRWlyX0VyX2luZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0luZHVzdHJpKQpMUWpvcmRicnVrX3N1biA8LSBhc190aWJibGUoc3VuX2Jvc19MUSRFaXJfRXJfSm9yZGJydWsvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSm9yZGJydWspCkxRdW5kZXJ2aXNuaW5nX3N1biA8LSBhc190aWJibGUoc3VuX2Jvc19MUSRFaXJfRXJfVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX1VuZGVydmlzbmluZykKTFFoZWxzZV9zdW4gPC0gYXNfdGliYmxlKHN1bl9ib3NfTFEkRWlyX0VyX0hlbHNlL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpzdW5fYm9zX0xRIDwtIHN1bl9ib3NfTFEgJT4lIAogIG11dGF0ZShMUWluZHVzdHJpID0gTFFpbmR1c3RyaV9zdW4kdmFsdWUsCiAgICAgICAgIExRam9yZGJydWsgPSBMUWpvcmRicnVrX3N1biR2YWx1ZSwKICAgICAgICAgTFF1bmRlcnZpc25pbmcgPSBMUXVuZGVydmlzbmluZ19zdW4kdmFsdWUsCiAgICAgICAgIExRaGVsc2UgPSBMUWhlbHNlX3N1biR2YWx1ZSkgJT4lIAogIHNlbGVjdCjDhXIsIExRaW5kdXN0cmksIExRam9yZGJydWssIExRdW5kZXJ2aXNuaW5nLCBMUWhlbHNlKQpgYGAKCkZvciBIYXJkYW5nZXI6CgpgYGB7cn0KaGFyX2Jvc19MUSA8LSBoYXJfYm9zICU+JSAKICBtdXRhdGUoRWlyX0VyX2luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFVuZGVydmlzbmluZy9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KTFFpbmR1c3RyaV9oYXIgPC0gYXNfdGliYmxlKGhhcl9ib3NfTFEkRWlyX0VyX2luZHVzdHJpL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0luZHVzdHJpKQpMUWpvcmRicnVrX2hhciA8LSBhc190aWJibGUoaGFyX2Jvc19MUSRFaXJfRXJfSm9yZGJydWsvbmFzam9uYWx0X2Jvc3RlZCRFaW5fRW5fSm9yZGJydWspCkxRdW5kZXJ2aXNuaW5nX2hhciA8LSBhc190aWJibGUoaGFyX2Jvc19MUSRFaXJfRXJfVW5kZXJ2aXNuaW5nL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX1VuZGVydmlzbmluZykKTFFoZWxzZV9oYXIgPC0gYXNfdGliYmxlKGhhcl9ib3NfTFEkRWlyX0VyX0hlbHNlL25hc2pvbmFsdF9ib3N0ZWQkRWluX0VuX0hlbHNlKQpgYGAKCmBgYHtyfQpoYXJfYm9zX0xRIDwtIGhhcl9ib3NfTFEgJT4lIAogIG11dGF0ZShMUWluZHVzdHJpID0gTFFpbmR1c3RyaV9oYXIkdmFsdWUsCiAgICAgICAgIExRam9yZGJydWsgPSBMUWpvcmRicnVrX2hhciR2YWx1ZSwKICAgICAgICAgTFF1bmRlcnZpc25pbmcgPSBMUXVuZGVydmlzbmluZ19oYXIkdmFsdWUsCiAgICAgICAgIExRaGVsc2UgPSBMUWhlbHNlX2hsZCR2YWx1ZSkgJT4lIAogIHNlbGVjdCjDhXIsIExRaW5kdXN0cmksIExRam9yZGJydWssIExRdW5kZXJ2aXNuaW5nLCBMUWhlbHNlKQpgYGAKCiMjIyBHSU5JIFJlZ2lvbmFsdG5pdsOlCiMjIyMgSGF1Z2FsYW5kZXQKCmBgYHtyfQpobGRfYm9zX0dJTkkgPC0gaGxkX2JvcyAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChobGRfYm9zJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBobGRfYm9zJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoaGxkX2JvcyRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKGhsZF9ib3MkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CmhsZF9ib3NfR0lOSSA8LSBobGRfYm9zX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhobGRfYm9zJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhobGRfYm9zJEluZHVzdHJpIC8gaGxkX2JvcyRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhobGRfYm9zJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9obGRfYm9zJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKGhsZF9ib3NfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiSGF1Z2FsYW5kZXQiPTgpKQpgYGAKCiMjIyBHSU5JIEtvbW11bmFsdCBuaXbDpQojIyMjIEhhdWdlc3VuZAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTA2IikKYGBgCgpgYGB7cn0KSGF1Z19ib3NfR0lOSSA8LSBIYXVnX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhIYXVnX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gSGF1Z19ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChIYXVnX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBIYXVnX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoSGF1Z19ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEhhdWdfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkhhdWdfYm9zX0dJTkkgPC0gSGF1Z19ib3NfR0lOSSAlPiUKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoSGF1Z19ib3NfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoSGF1Z19ib3NfR0lOSSRJbmR1c3RyaSAvIEhhdWdfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoSGF1Z19ib3NfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvSGF1Z19ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYm9zdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBIYXVnX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgSGF1Z19ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdlc3VuZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKIyMjIEdJTkkgS29tbXVuYWx0IG5pdsOlCiMjIyMgQm9rbgoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ1IikKYGBgCgpgYGB7cn0KQm9rbl9ib3NfR0lOSSA8LSBCb2tuX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhCb2tuX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gQm9rbl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChCb2tuX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoQm9rbl9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEJva25fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gQm9rbl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkJva25fYm9zX0dJTkkgPC0gQm9rbl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEJva25fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBCb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEJva25fYm9zX0dJTkkkSW5kdXN0cmkgLyBCb2tuX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEJva25fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0Jva25fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgQm9rbl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBCb2tuX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQm9rbiI9MTEpKQpgYGAKIyMjIEdJTkkgS29tbXVuYWx0IG5pdsOlCiMjIyMgVHlzdsOmcgoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ2IikKYGBgCgpgYGB7cn0KVHlzdl9ib3NfR0lOSSA8LSBUeXN2X2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhUeXN2X2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gVHlzdl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChUeXN2X2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBUeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoVHlzdl9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKFR5c3ZfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gVHlzdl9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClR5c3ZfYm9zX0dJTkkgPC0gVHlzdl9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFR5c3ZfYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBUeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFR5c3ZfYm9zX0dJTkkkSW5kdXN0cmkgLyBUeXN2X2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFR5c3ZfYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL1R5c3ZfYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVHlzdl9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmcjogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBUeXN2X2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiVHlzdsOmciI9MTEpKQpgYGAKIyMjIEdJTkkgS29tbXVuYWx0IG5pdsOlCiMjIyMgS2FybcO4eQoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ5IikKYGBgCgpgYGB7cn0KS2FybV9ib3NfR0lOSSA8LSBLYXJtX2Jvc19HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhLYXJtX2Jvc19HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gS2FybV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChLYXJtX2Jvc19HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBLYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoS2FybV9ib3NfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYm9zdGVkJEluZHVzdHJpIC0gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEthcm1fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gS2FybV9ib3NfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9ib3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9Ckthcm1fYm9zX0dJTkkgPC0gS2FybV9ib3NfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEthcm1fYm9zX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBLYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEthcm1fYm9zX0dJTkkkSW5kdXN0cmkgLyBLYXJtX2Jvc19HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9ib3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYm9zdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEthcm1fYm9zX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0thcm1fYm9zX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2Jvc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2Jvc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS2FybV9ib3NfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBLYXJtX2Jvc19HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eSI9MTEpKQpgYGAKCgojIDMgU3lzc2Vsc2V0dGluZyBpIHVsaWtlIG7DpnJpbmdlciwgZXR0ZXIgYm9zdGVkIChNb2RlbGxlciB1bmRlciBhcmJlaWQpCgojIyBIYXVnYWxhbmRldAoKYGBge3IgQm9zdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTc6IEhhdWdhbGFuZGV0IikrCiAgeWxhYigiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX0hhdWdhbGFuZGV0XzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDExMDYsIDExMzUsIDExNDUsIDExNDYsIDExNDksIDExNTEsIDExNjApKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IGBBbGxlIE7DpnJpbmdlcmAsIChhbmdsZT0wKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTg6IEhhdWdhbGFuZGV0IiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgaGxkX2Jvc19sb25nfQpobGRfYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxOTogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjA6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9Cb3N0ZWR9CmhsZF9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiSGF1Z2VzdW5kIiwgIkthcm3DuHkiLCAiVmluZGFmam9yZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDIxOiBIYXVnYWxhbmRldDogSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhdWdlbGFuZGV0XzRfTWluc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjI6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSwgVHlzdsOmciBvZyBVdHNpcmEiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKIyMgU3VubmhvcmRsYW5kCgpgYGB7ciBCb3N0ZWRfU3VubmhvcmRsYW5kXzF9CnN1bl9ib3MgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjM6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9TdW5uaG9yZGxhbmRfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoNDYxMSwgNDYxMiwgNDYxMywgNDYxNCwgNDYxNSwgNDYxNiwgNDYxNykpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpICsKICAgbGFicyh0aXRsZSA9ICJGaWcuIDI0OiBTdW5uaG9yZGxhbmQiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBzdW5fYm9zX2xvbmd9CnN1bl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9TdW5uaG9yZGxhbmRfM19TdMO4cnN0ZV9Cb3N0ZWR9CnN1bl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjU6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMjY6IFN1bm5ob3JkbGFuZDogRXRuZSwgRml0aGFyLCBTdmVpbyBvZyBUeXNuZXMiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCw7htbG8iLCAiU3RvcmQiLCAiS3Zpbm5oZXJhZCIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDI3OiBTdW5uaG9yZGxhbmQ6IELDuG1sbywgS3Zpbm5oZXJhZCBvZyBTdG9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIlN2ZWlvIiwgIkZpdGphciIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyODogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRqYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIyBIYXJkYW5nZXIKCmBgYHtyIEJvc3RlZF9IYXJkYW5nZXJfMX0KaGFyX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyOTogSGFyZGFuZ2VyIiwgeT0gIkFsbGUgTsOmcmluZ2VyIikgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpCmBgYAoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMzA6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9ib3NfbG9uZ30KaGFyX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9Cb3N0ZWR9Cmhhcl9ib3NfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiT2RkYSIsICJVbGxlbnN2YW5nIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDMxOiBIYXJkYW5nZXI6IE9kZGEgb2cgVWxsZW5zdmFuZyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAzMjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgMy4xIExva2FsaXNlcmluZ3Nrdm90aWVudGVyIChWZW50ZXIgcMOlIHN2YXIgZnLDpSBJbmdlIGFuZy4gR0lOSS12ZXJkaWFyLikKCmBgYHtyfQpsaWJyYXJ5KHJlYWR4bCkKbmFzam9uYWx0X2FyYmVpZHNzdGVkIDwtIHJlYWRfZXhjZWwoIkRhdGEvbmFzam9uYWx0X2FyYmVpZHNzdGVkLnhsc3giKQpgYGAKCiMjIExva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciByZWdpb25lbmUgc2FtbGV0IChNw6UgdGlsIGxpdHQgbWVpciBhcmJlaWQgZW5kbykKCiMjIyBIYXVnYWxhbmRldCAyMDA4LTIwMjAKCi0gICBFaXJfRXJfSm9yZGJydWsgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbiBIYXVnYWxhbmRldAotICAgRWlyX0VyX0luZHVzdHJpID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSW5kdXN0cmktc2VrdG9yZW4gaSByZWdpb24gSGF1Z2FsYW5kZXQKLSAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBFbGVrZXRyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24tc2VrdG9yZW4gaSByZWdpb24gSGF1Z2FsYW5kZXQKLSAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldC1zZWt0b3JlbiBpIHJlZ2lvbiBIYXVnYWxhbmRldAotICAgRWlyX0VyX0ZpbmFucyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nLXNla3RvcmVuIGkgcmVnaW9uIEhhdWdhbGFuZGV0Ci0gICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gVW5kZXJ2aXNuaW5nLXNla3RvcmVuIGkgcmVnaW9uIEhhdWdhbGFuZGV0Ci0gICBFaXJfRXJfSGVsc2UgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyLXNla3RvcmVuIGkgcmVnaW9uIEhhdWdhbGFuZGV0CgpgYGB7ciBobGRfaW5kdXN0cml9CmhsZF9hcmJfTFEgPC0gaGxkX2FyYiAlPiUgCiAgIyBTbGlrIGZpbm5lciB2aSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIEluZHVzdHJpIGkgSGF1Z2VsYW5kZXQgZm9yIMOlciAyMDA4LTIwMjAKICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbm5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfSm9yZGJydWssIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0VsX1Zhbm5fUmVubywgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnLCBFaXJfRXJfRmluYW5zLCBFaXJfRXJfVW5kZXJ2aXNuaW5nLCBFaXJfRXJfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShobGRfYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudCwgcmVnaW9uOiBIYXVnYWxhbmRldCI9OSkpCmBgYAoKYGBge3J9CmhsZF9hcmJfR0lOSSA8LSBobGRfYXJiICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKGhsZF9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoaGxkX2FyYiRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBobGRfYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChobGRfYXJiJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KaGxkX2FyYl9HSU5JIDwtIGhsZF9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKGhsZF9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBobGRfYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhobGRfYXJiJEluZHVzdHJpIC8gaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoaGxkX2FyYiRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvaGxkX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGxkX2FyYl9HSU5JLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnYWxhbmRldCI9OCkpCmBgYAoKIyMjIyBLb21tdW5lbml2w6UgcMOlIEhhdWdhbGFuZGV0IChIYXVnZXN1bmQsIEthcm3DuHksIFR5c3bDpnIgb2cgQm9rbikKCiMjIyMjIEhhdWdlc3VuZAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTA2IikKYGBgCgpgYGB7cn0KSGF1Z19hcmJfR0lOSSA8LSBIYXVnX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhIYXVnX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChIYXVnX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gSGF1Z19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoSGF1Z19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9CkhhdWdfYXJiX0dJTkkgPC0gSGF1Z19hcmJfR0lOSSAlPiUKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoSGF1Z19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIEhhdWdfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEhhdWdfYXJiX0dJTkkkSW5kdXN0cmkgLyBIYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhIYXVnX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9IYXVnX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBIYXVnX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJIYXVnZXN1bmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgSGF1Z19hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkhhdWdlc3VuZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIEJva24KCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTE0NSIpCmBgYAoKYGBge3J9CkJva25fYXJiX0dJTkkgPC0gQm9rbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoQm9rbl9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIEJva25fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoQm9rbl9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCb2tuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChCb2tuX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKEJva25fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBCb2tuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpCb2tuX2FyYl9HSU5JIDwtIEJva25fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhCb2tuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gQm9rbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoQm9rbl9hcmJfR0lOSSRJbmR1c3RyaSAvIEJva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEJva25fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0Jva25fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIEJva25fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva246IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgQm9rbl9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJFaXIvRXIiID0gMywgIkVpbi9FbiIgPSAzLCAiTFEiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkJva246IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMjIyBUeXN2w6ZyCgpgYGB7cn0KVHlzdl9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjExNDYiKQpgYGAKCmBgYHtyfQpUeXN2X2FyYl9HSU5JIDwtIFR5c3ZfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKFR5c3ZfYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KVHlzdl9hcmJfR0lOSSA8LSBUeXN2X2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKFR5c3ZfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoVHlzdl9hcmJfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBUeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChUeXN2X2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gVHlzdl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KVHlzdl9hcmJfR0lOSSA8LSBUeXN2X2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoVHlzdl9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIFR5c3ZfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFR5c3ZfYXJiX0dJTkkkSW5kdXN0cmkgLyBUeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhUeXN2X2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9UeXN2X2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBUeXN2X2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJUeXN2w6ZyOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFR5c3ZfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJUeXN2w6ZyOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgS2FybcO4eQoKYGBge3J9Ckthcm1fYXJiX0dJTkkgPC0gc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lICIxMTQ5IikKYGBgCgpgYGB7cn0KS2FybV9hcmJfR0lOSSA8LSBLYXJtX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhLYXJtX2FyYl9HSU5JKVtbNV1dIDwtICLDhXIiCmBgYAoKYGBge3J9Ckthcm1fYXJiX0dJTkkgPC0gS2FybV9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChLYXJtX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAtIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEthcm1fYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9IZWxzZSA9ICgoS2FybV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEthcm1fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9Ckthcm1fYXJiX0dJTkkgPC0gS2FybV9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEthcm1fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBLYXJtX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhLYXJtX2FyYl9HSU5JJEluZHVzdHJpIC8gS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoS2FybV9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvS2FybV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS2FybV9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eTogR2luaSAmIFJESSI9OCkpCgprYWJsZSgKICBLYXJtX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiS2FybcO4eTogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyBTdW5uaG9yZGxhbmQgMjAwOC0yMDIwCgotICAgRWlyX0VyX0pvcmRicnVrID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfSW5kdXN0cmkgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBJbmR1c3RyaS1zZWt0b3JlbiBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQKLSAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBFbGVrZXRyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24tc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cgPSBTYW1sZXQgc3lzc2Vsc2V0dGluZyBpbm5lbiBCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQtc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfRmluYW5zID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gRmluYW5zaWVyaW5nIG9nIEZvcnNpa3Jpbmctc2VrdG9yZW4gaSByZWdpb24gU3VubmhvcmRsYW5kCi0gICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gVW5kZXJ2aXNuaW5nLXNla3RvcmVuIGkgcmVnaW9uIFN1bm5ob3JkbGFuZAotICAgRWlyX0VyX0hlbHNlID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3Rlci1zZWt0b3JlbiBpIHJlZ2lvbiBTdW5uaG9yZGxhbmQKCmBgYHtyIHN1bl9pbmR1c3RyaX0Kc3VuX2FyYl9MUSA8LSBzdW5fYXJiICU+JSAKICAjIFNsaWsgZmlubmVyIHZpIHNhbWxldCBzeXNzZWxzZXR0aW5nIGkgSW5kdXN0cmkgaSBTdW5uaG9yZGxhbmQgZm9yIMOlciAyMDA4LTIwMjAKICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0VsX1Zhbm5fUmVubyA9IGBFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbm5sZWdnc3Zpcmtzb21oZXRgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9VbmRlcnZpc25pbmcgPSBVbmRlcnZpc25pbmcvYEFsbGUgTsOmcmluZ2VyYCwKICAgICAgICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmApICU+JSAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfSm9yZGJydWssIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0VsX1Zhbm5fUmVubywgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnLCBFaXJfRXJfRmluYW5zLCBFaXJfRXJfVW5kZXJ2aXNuaW5nLCBFaXJfRXJfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShzdW5fYXJiX0xRLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9yZGJydWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFubiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCeWdnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcnYuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JQogIGFkZF9oZWFkZXJfYWJvdmUoYygiTG9rYWxrdm90aWVudGVuLCByZWdpb246IFN1bm5ob3JkbGFuZCI9OSkpCmBgYAoKYGBge3J9CnN1bl9hcmJfR0lOSSA8LSBzdW5fYXJiICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKHN1bl9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gc3VuX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoc3VuX2FyYiRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChzdW5fYXJiJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gc3VuX2FyYiRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0Kc3VuX2FyYl9HSU5JIDwtIHN1bl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKHN1bl9hcmIkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBzdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoc3VuX2FyYiRJbmR1c3RyaSAvIHN1bl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhzdW5fYXJiJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9zdW5fYXJiJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZShzdW5fYXJiX0dJTkksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJSZWdpb246IFN1bm5ob3JkbGFuZCI9OCkpCmBgYAoKIyMjIyBLb21tdW5lbml2w6UgaSBTdW5uaG9yZGxhbmQgKFN0b3JkLCBLdmlubmhlcmFkLCBCw7htbG8gb2cgU3ZlaW8pCgojIyMjIyBTdG9yZAoKYGBge3J9ClN0b3JkX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxNCIpCmBgYAoKYGBge3J9ClN0b3JkX2FyYl9HSU5JIDwtIFN0b3JkX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBFaXJfRXJfUHJpbcOmciA9IGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSW5kdXN0cmkgPSBJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0hlbHNlID0gYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fUHJpbcOmciA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0luZHVzdHJpID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBMUV9Qcmltw6ZyID0gRWlyX0VyX1ByaW3DpnIgLyBFaW5fRW5fUHJpbcOmciwKICAgIExRX0luZHVzdHJpID0gRWlyX0VyX0luZHVzdHJpIC8gRWluX0VuX0luZHVzdHJpLAogICAgTFFfSGVsc2UgPSBFaXJfRXJfSGVsc2UgLyBFaW5fRW5fSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz00KQpgYGAKCmBgYHtyfQpuYW1lcyhTdG9yZF9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpTdG9yZF9hcmJfR0lOSSA8LSBTdG9yZF9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgR0lOSV9Qcmltw6ZyID0gKChTdG9yZF9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBTdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSwKICAgIAogICAgR0lOSV9JbmR1c3RyaSA9ICgoU3RvcmRfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC0gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKFN0b3JkX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgIC0gU3RvcmRfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMikpCmBgYAoKYGBge3J9ClN0b3JkX2FyYl9HSU5JIDwtIFN0b3JkX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoU3RvcmRfYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAgLyBTdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoU3RvcmRfYXJiX0dJTkkkSW5kdXN0cmkgLyBTdG9yZF9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9IZWxzZSA9IDEgLyBhYnMoU3RvcmRfYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL1N0b3JkX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApKSAlPiUgCiAgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpICU+JSAKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIGRpZ2l0cz02KQpgYGAKCmBgYHtyfQprYWJsZSgKICBTdG9yZF9hcmJfR0lOSSAlPiUgCiAgICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkdJTkkiID0gMywgIlJESSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3RvcmQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgU3RvcmRfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJTdG9yZDogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIEt2aW5uaGVyYWQKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTciKQpgYGAKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBLdmlubl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoS3Zpbm5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KS3Zpbm5fYXJiX0dJTkkgPC0gS3Zpbm5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoS3Zpbm5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChLdmlubl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIEt2aW5uX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpLdmlubl9hcmJfR0lOSSA8LSBLdmlubl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJEluZHVzdHJpIC8gS3Zpbm5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKEt2aW5uX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9Ldmlubl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkt2aW5uaGVyYWQ6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgS3Zpbm5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJLdmlubmhlcmFkOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgQsO4bWxvCgpgYGB7cn0KQsO4bWxvX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiNDYxMyIpCmBgYAoKYGBge3J9CkLDuG1sb19hcmJfR0lOSSA8LSBCw7htbG9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEVpcl9Fcl9Qcmltw6ZyID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9Qcmltw6ZyID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9IZWxzZSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIExRX1ByaW3DpnIgPSBFaXJfRXJfUHJpbcOmciAvIEVpbl9Fbl9Qcmltw6ZyLAogICAgTFFfSW5kdXN0cmkgPSBFaXJfRXJfSW5kdXN0cmkgLyBFaW5fRW5fSW5kdXN0cmksCiAgICBMUV9IZWxzZSA9IEVpcl9Fcl9IZWxzZSAvIEVpbl9Fbl9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTQpCmBgYAoKYGBge3J9Cm5hbWVzKELDuG1sb19hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpCw7htbG9fYXJiX0dJTkkgPC0gQsO4bWxvX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBHSU5JX1ByaW3DpnIgPSAoKELDuG1sb19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBCw7htbG9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKELDuG1sb19hcmJfR0lOSSRJbmR1c3RyaS9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLSBCw7htbG9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKELDuG1sb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKV4yKSkKYGBgCgpgYGB7cn0KQsO4bWxvX2FyYl9HSU5JIDwtIELDuG1sb19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKELDuG1sb19hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYCAvIELDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgICAKICAgIFJESV9JbmR1c3RyaSA9IDEgLyBhYnMoQsO4bWxvX2FyYl9HSU5JJEluZHVzdHJpIC8gQsO4bWxvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAvIG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhCw7htbG9fYXJiX0dJTkkkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL0LDuG1sb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgQsO4bWxvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiR0lOSSIgPSAzLCAiUkRJIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJCw7htbG86IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgQsO4bWxvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiQsO4bWxvOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKIyMjIyMgU3ZlaW8KCmBgYHtyfQpTdmVpb19hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTIiKQpgYGAKCmBgYHtyfQpTdmVpb19hcmJfR0lOSSA8LSBTdmVpb19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoU3ZlaW9fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KU3ZlaW9fYXJiX0dJTkkgPC0gU3ZlaW9fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoU3ZlaW9fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFN2ZWlvX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChTdmVpb19hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFN2ZWlvX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpTdmVpb19hcmJfR0lOSSA8LSBTdmVpb19hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFN2ZWlvX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFN2ZWlvX2FyYl9HSU5JJEluZHVzdHJpIC8gU3ZlaW9fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFN2ZWlvX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9TdmVpb19hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgU3ZlaW9fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlN2ZWlvOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIFN2ZWlvX2FyYl9HSU5JICU+JSAKICAgIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiICI9MiwgIkVpci9FciIgPSAzLCAiRWluL0VuIiA9IDMsICJMUSIgPSAzKSkgJT4lIAogIGFkZF9oZWFkZXJfYWJvdmUoYygiU3ZlaW86IExva2Fsa3ZvdGllbnQiPTExKSkKYGBgCgojIyMgSGFyZGFuZ2VyIDIwMDgtMjAyMAoKLSAgIEVpcl9Fcl9Kb3JkYnJ1ayA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0luZHVzdHJpID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gSW5kdXN0cmktc2VrdG9yZW4gaSByZWdpb24gSGFyZGFuZ2VyCi0gICBFaXJfRXJfRWxfVmFubl9SZW5vID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gRWxla2V0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gU2FtbGV0IHN5c3NlbHNldHRpbmcgaW5uZW4gQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0LXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX0ZpbmFucyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nLXNla3RvcmVuIGkgcmVnaW9uIEhhcmRhbmdlcgotICAgRWlyX0VyX1VuZGVydmlzbmluZyA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIFVuZGVydmlzbmluZy1zZWt0b3JlbiBpIHJlZ2lvbiBIYXJkYW5nZXIKLSAgIEVpcl9Fcl9IZWxzZSA9IFNhbWxldCBzeXNzZWxzZXR0aW5nIGlubmVuIEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXItc2VrdG9yZW4gaSByZWdpb24gSGFyZGFuZ2VyCgpgYGB7ciBoYXJfaW5kdXN0cml9Cmhhcl9hcmJfTFEgPC0gaGFyX2FyYiAlPiUgCiAgIyBTbGlrIGZpbm5lciB2aSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIEluZHVzdHJpIGkgSGFyZGFuZ2VyIGZvciDDpXIgMjAwOC0yMDIwCiAgbXV0YXRlKEVpcl9Fcl9Kb3JkYnJ1ayA9IGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9FbF9WYW5uX1Jlbm8gPSBgRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb25gL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9CeWdnX29nX0FubGVnZyA9IGBCeWdnZS0gb2cgQW5ubGVnZ3N2aXJrc29taGV0YC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfRmluYW5zID0gYEZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiAgICAgICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgKSAlPiUgCiAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX0pvcmRicnVrLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9FbF9WYW5uX1Jlbm8sIEVpcl9Fcl9CeWdnX29nX0FubGVnZywgRWlyX0VyX0ZpbmFucywgRWlyX0VyX1VuZGVydmlzbmluZywgRWlyX0VyX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoaGFyX2FyYl9MUSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvcmRicnVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbm4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQnlnZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaW5hbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJ2LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIkxva2Fsa3ZvdGllbnQsIHJlZ2lvbjogSGFyZGFuZ2VyIj05KSkKYGBgCgpgYGB7cn0KaGFyX2FyYl9HSU5JIDwtIGhhcl9hcmIgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoaGFyX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAgLSBoYXJfYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0luZHVzdHJpID0gKChoYXJfYXJiJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSGVsc2UgPSAoKGhhcl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAgLSBoYXJfYXJiJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpoYXJfYXJiX0dJTkkgPC0gaGFyX2FyYl9HSU5JICU+JSAKICBtdXRhdGUoCiAgICBSRElfUHJpbcOmciA9IDEgLyBhYnMoaGFyX2FyYiRgSm9yZGJydWssIFNrb2dicnVrIG9nIEZpc2tlYCAvIGhhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhoYXJfYXJiJEluZHVzdHJpIC8gaGFyX2FyYiRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkSW5kdXN0cmkgLyBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCksCiAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKGhhcl9hcmIkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL2hhcl9hcmIkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCkpICAlPiUKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKGhhcl9hcmJfR0lOSSwKICAgICAgICAgICAgIGNvbC5uYW1lcyA9IGMoIsOFciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlJlZ2lvbjogSGFyZGFuZ2VyIj04KSkKYGBgCgojIyMjIEtvbW11bmVuaXbDpSBpIEhhcmRhbmdlciAoT2RkYSBvZyBVbGxlbnN2YW5nKQoKIyMjIyMgT2RkYQoKYGBge3J9Cm5hc2pvX2FyYl9yZWQgPC0gbmFzam9uYWx0X2FyYmVpZHNzdGVkICU+JSAKICBmaWx0ZXIoYWFyICVpbiUgYygyMDA4OjIwMTkpKQpgYGAKCmBgYHtyfQpPZGRhX2FyYl9HSU5JIDwtIHN5c3NlbF9hcmIgJT4lIAogIGZpbHRlcihrbnIgJWluJSAiMTIyOCIpCmBgYAoKYGBge3J9Ck9kZGFfYXJiX0dJTkkgPC0gT2RkYV9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb19hcmJfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSW5kdXN0cmkgPSBuYXNqb19hcmJfcmVkJEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiAgICBFaW5fRW5fSGVsc2UgPSBuYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoT2RkYV9hcmJfR0lOSSlbWzVdXSA8LSAiw4VyIgpgYGAKCmBgYHtyfQpPZGRhX2FyYl9HSU5JIDwtIE9kZGFfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoT2RkYV9hcmJfR0lOSSRgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9uYXNqb19hcmJfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgL25hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKE9kZGFfYXJiX0dJTkkkSW5kdXN0cmkvbmFzam9fYXJiX3JlZCRJbmR1c3RyaSAtIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChPZGRhX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9uYXNqb19hcmJfcmVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIE9kZGFfYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb19hcmJfcmVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpPZGRhX2FyYl9HSU5JIDwtIE9kZGFfYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIFJESV9Qcmltw6ZyID0gMSAvIGFicyhPZGRhX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19hcmJfcmVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0luZHVzdHJpID0gMSAvIGFicyhPZGRhX2FyYl9HSU5JJEluZHVzdHJpIC8gT2RkYV9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb19hcmJfcmVkJEluZHVzdHJpIC8gbmFzam9fYXJiX3JlZCRgQWxsZSBOw6ZyaW5nZXJgKSwKICAgIAogICAgUkRJX0hlbHNlID0gMSAvIGFicyhPZGRhX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9PZGRhX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAgLQogIG5hc2pvX2FyYl9yZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvX2FyYl9yZWQkYEFsbGUgTsOmcmluZ2VyYCkpICU+JSAKICAKICBzZWxlY3Qow4VyLCBgQWxsZSBOw6ZyaW5nZXJgLCBFaXJfRXJfUHJpbcOmciwgRWlyX0VyX0luZHVzdHJpLCBFaXJfRXJfSGVsc2UsIEVpbl9Fbl9Qcmltw6ZyLCBFaW5fRW5fSW5kdXN0cmksIEVpbl9Fbl9IZWxzZSwgTFFfUHJpbcOmciwgTFFfSW5kdXN0cmksIExRX0hlbHNlLCBHSU5JX1ByaW3DpnIsIEdJTklfSW5kdXN0cmksIEdJTklfSGVsc2UsIFJESV9Qcmltw6ZyLCBSRElfSW5kdXN0cmksIFJESV9IZWxzZSkgJT4lIAogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgZGlnaXRzPTYpCmBgYAoKYGBge3J9CmthYmxlKAogIE9kZGFfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIk9kZGEoLTIwMTkpOiBHaW5pICYgUkRJIj04KSkKCmthYmxlKAogIE9kZGFfYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJPZGRhKC0yMDE5KTogTG9rYWxrdm90aWVudCI9MTEpKQpgYGAKCiMjIyMjIFVsbGVuc3ZhbmcKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgIjQ2MTgiKQpgYGAKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBVbGxlbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgRWlyX0VyX1ByaW3DpnIgPSBgSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWlyX0VyX0luZHVzdHJpID0gSW5kdXN0cmkvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpcl9Fcl9IZWxzZSA9IGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX1ByaW3DpnIgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKICAgIEVpbl9Fbl9JbmR1c3RyaSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaS9gQWxsZSBOw6ZyaW5nZXJgLAogICAgRWluX0VuX0hlbHNlID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9gQWxsZSBOw6ZyaW5nZXJgLAogICAgTFFfUHJpbcOmciA9IEVpcl9Fcl9Qcmltw6ZyIC8gRWluX0VuX1ByaW3DpnIsCiAgICBMUV9JbmR1c3RyaSA9IEVpcl9Fcl9JbmR1c3RyaSAvIEVpbl9Fbl9JbmR1c3RyaSwKICAgIExRX0hlbHNlID0gRWlyX0VyX0hlbHNlIC8gRWluX0VuX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NCkKYGBgCgpgYGB7cn0KbmFtZXMoVWxsZW5fYXJiX0dJTkkpW1s1XV0gPC0gIsOFciIKYGBgCgpgYGB7cn0KVWxsZW5fYXJiX0dJTkkgPC0gVWxsZW5fYXJiX0dJTkkgJT4lIAogIG11dGF0ZSgKICAgIEdJTklfUHJpbcOmciA9ICgoVWxsZW5fYXJiX0dJTkkkYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC0gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYC9uYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEFsbGUgTsOmcmluZ2VyYCleMiksCiAgICAKICAgIEdJTklfSW5kdXN0cmkgPSAoKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRJbmR1c3RyaSAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpLAogICAgCiAgICBHSU5JX0hlbHNlID0gKChVbGxlbl9hcmJfR0lOSSRgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYCAtIFVsbGVuX2FyYl9HSU5JJGBBbGxlIE7DpnJpbmdlcmAvbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApXjIpKQpgYGAKCmBgYHtyfQpVbGxlbl9hcmJfR0lOSSA8LSBVbGxlbl9hcmJfR0lOSSAlPiUgCiAgbXV0YXRlKAogICAgUkRJX1ByaW3DpnIgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2VgIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2VgIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSW5kdXN0cmkgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJEluZHVzdHJpIC8gVWxsZW5fYXJiX0dJTkkkYEFsbGUgTsOmcmluZ2VyYCAtCiAgbmFzam9uYWx0X2FyYmVpZHNzdGVkJEluZHVzdHJpIC8gbmFzam9uYWx0X2FyYmVpZHNzdGVkJGBBbGxlIE7DpnJpbmdlcmApLAogICAgCiAgICBSRElfSGVsc2UgPSAxIC8gYWJzKFVsbGVuX2FyYl9HSU5JJGBIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyYC9VbGxlbl9hcmJfR0lOSSRgQWxsZSBOw6ZyaW5nZXJgIC0KICBuYXNqb25hbHRfYXJiZWlkc3N0ZWQkYEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXJgL25hc2pvbmFsdF9hcmJlaWRzc3RlZCRgQWxsZSBOw6ZyaW5nZXJgKSkgJT4lIAogIAogIHNlbGVjdCjDhXIsIGBBbGxlIE7DpnJpbmdlcmAsIEVpcl9Fcl9Qcmltw6ZyLCBFaXJfRXJfSW5kdXN0cmksIEVpcl9Fcl9IZWxzZSwgRWluX0VuX1ByaW3DpnIsIEVpbl9Fbl9JbmR1c3RyaSwgRWluX0VuX0hlbHNlLCBMUV9Qcmltw6ZyLCBMUV9JbmR1c3RyaSwgTFFfSGVsc2UsIEdJTklfUHJpbcOmciwgR0lOSV9JbmR1c3RyaSwgR0lOSV9IZWxzZSwgUkRJX1ByaW3DpnIsIFJESV9JbmR1c3RyaSwgUkRJX0hlbHNlKSAlPiUgCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9NikKYGBgCgpgYGB7cn0Ka2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgR0lOSV9Qcmltw6ZyLCBHSU5JX0luZHVzdHJpLCBHSU5JX0hlbHNlLCBSRElfUHJpbcOmciwgUkRJX0luZHVzdHJpLCBSRElfSGVsc2UpLAogICAgICAgICAgICAgY29sLm5hbWVzID0gYygiw4VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIikpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiPTIsICJHSU5JIiA9IDMsICJSREkiID0gMykpICU+JSAKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlVsbGVuc3Zhbmc6IEdpbmkgJiBSREkiPTgpKQoKa2FibGUoCiAgVWxsZW5fYXJiX0dJTkkgJT4lIAogICAgc2VsZWN0KMOFciwgYEFsbGUgTsOmcmluZ2VyYCwgRWlyX0VyX1ByaW3DpnIsIEVpcl9Fcl9JbmR1c3RyaSwgRWlyX0VyX0hlbHNlLCBFaW5fRW5fUHJpbcOmciwgRWluX0VuX0luZHVzdHJpLCBFaW5fRW5fSGVsc2UsIExRX1ByaW3DpnIsIExRX0luZHVzdHJpLCBMUV9IZWxzZSksCiAgICAgICAgICAgICBjb2wubmFtZXMgPSBjKCLDhXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmltw6ZyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZHVzdHJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbHNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW3DpnIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kdXN0cmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJpbcOmciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmR1c3RyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxzZSIpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIj0yLCAiRWlyL0VyIiA9IDMsICJFaW4vRW4iID0gMywgIkxRIiA9IDMpKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJVbGxlbnN2YW5nOiBMb2thbGt2b3RpZW50Ij0xMSkpCmBgYAoKPz9EZXR0ZSBmZXJkaWc/PwoKIyMgTmFzam9uYWx0Pz8gKERldHRlIGthbiBrYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFuc2tqZSBibGkgdGF0dCB2ZWtrLiBEZXQgc2VyIHZpIGV0dGVyIGt2YXJ0KQoKYGBge3J9CiNzeXNzZWxfYXJiIDwtIHN5c3NlbF9hcmIgJT4lIAojICBtdXRhdGUoRWlyX0VyX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpcl9Fcl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWlyX0VyX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpcl9Fcl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaXJfRXJfSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKYGBgCgpgYGB7cn0KI25hc2pvbmFsdF9hcmJlaWRzc3RlZCA8LSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQgJT4lIAojICBtdXRhdGUoRWluX0VuX0pvcmRicnVrID0gYEpvcmRicnVrLCBTa29nYnJ1ayBvZyBGaXNrZWAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpbl9Fbl9JbmR1c3RyaSA9IEluZHVzdHJpL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fRWxfVmFubl9SZW5vID0gYEVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uYC9gQWxsZSBOw6ZyaW5nZXJgLAojICAgICAgICAgRWluX0VuX0J5Z2dfb2dfQW5sZWdnID0gYEJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldGAvYEFsbGUgTsOmcmluZ2VyYCwKIyAgICAgICAgIEVpbl9Fbl9GaW5hbnMgPSBgRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmdgL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fVW5kZXJ2aXNuaW5nID0gVW5kZXJ2aXNuaW5nL2BBbGxlIE7DpnJpbmdlcmAsCiMgICAgICAgICBFaW5fRW5fSGVsc2UgPSBgSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlcmAvYEFsbGUgTsOmcmluZ2VyYCkKCgojTFFfYXJiX0pvcmRicnVrIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0pvcmRicnVrKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9Kb3JkYnJ1ayksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0pvcmRicnVrL0Vpbl9Fbl9Kb3JkYnJ1aykKCgojTFFfYXJiX0luZHVzdHJpIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0luZHVzdHJpKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9JbmR1c3RyaSksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0luZHVzdHJpL0Vpbl9Fbl9JbmR1c3RyaSkKCgojTFFfYXJiX0VsX1Zhbm5fUmVubyA8LSBzeXNzZWxfYXJiICU+JSAKIyAgc2VsZWN0KGFhciwga25hdm4sIEVpcl9Fcl9FbF9WYW5uX1Jlbm8pICU+JSAKIyAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiMgIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQsIGFhciwgRWluX0VuX0VsX1Zhbm5fUmVubyksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0VsX1Zhbm5fUmVuby9FaW5fRW5fRWxfVmFubl9SZW5vKQoKCiNMUV9hcmJfQnlnZ19BbmxlZ2cgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cpICU+JSAKIyAgbXV0YXRlKGFhciA9IGFzLmNoYXJhY3RlcihhYXIpKSAlPiUgCiMgIGxlZnRfam9pbihzZWxlY3QoLmRhdGEgPSBuYXNqb25hbHRfYXJiZWlkc3N0ZWQsIGFhciwgRWluX0VuX0J5Z2dfb2dfQW5sZWdnKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAojICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfQnlnZ19vZ19BbmxlZ2cvRWluX0VuX0J5Z2dfb2dfQW5sZWdnKQoKCiNMUV9hcmJfRmluYW5zIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0ZpbmFucykgJT4lIAojICBtdXRhdGUoYWFyID0gYXMuY2hhcmFjdGVyKGFhcikpICU+JSAKIyAgbGVmdF9qb2luKHNlbGVjdCguZGF0YSA9IG5hc2pvbmFsdF9hcmJlaWRzc3RlZCwgYWFyLCBFaW5fRW5fRmluYW5zKSwgYnkgPSBjKCJhYXIiKSkgJT4lIAojICBtdXRhdGUoYW5kZWwgPSBFaXJfRXJfRmluYW5zL0Vpbl9Fbl9GaW5hbnMpCgoKI0xRX2FyYl9VbmRlcnZpc25pbmcgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBFaXJfRXJfVW5kZXJ2aXNuaW5nKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9VbmRlcnZpc25pbmcpLCBieSA9IGMoImFhciIpKSAlPiUgCiMgIG11dGF0ZShhbmRlbCA9IEVpcl9Fcl9VbmRlcnZpc25pbmcvRWluX0VuX1VuZGVydmlzbmluZykKCgojTFFfYXJiX0hlbHNlIDwtIHN5c3NlbF9hcmIgJT4lIAojICBzZWxlY3QoYWFyLCBrbmF2biwgRWlyX0VyX0hlbHNlKSAlPiUgCiMgIG11dGF0ZShhYXIgPSBhcy5jaGFyYWN0ZXIoYWFyKSkgJT4lIAojICBsZWZ0X2pvaW4oc2VsZWN0KC5kYXRhID0gbmFzam9uYWx0X2FyYmVpZHNzdGVkLCBhYXIsIEVpbl9Fbl9IZWxzZSksIGJ5ID0gYygiYWFyIikpICU+JSAKIyAgbXV0YXRlKGFuZGVsID0gRWlyX0VyX0hlbHNlL0Vpbl9Fbl9IZWxzZSkKYGBgCgpgYGB7cn0KI3N5c3NlbF9hcmIgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIG11dGF0ZShMUV9hcmJfSm9yZGJydWsgPSBMUV9hcmJfSm9yZGJydWskYW5kZWwsCiMgICAgICAgICBMUV9hcmJfSW5kdXN0cmkgPSBMUV9hcmJfSW5kdXN0cmkkYW5kZWwsCiMgICAgICAgICBMUV9hcmJfRWxfVmFubl9SZW5vID0gTFFfYXJiX0VsX1Zhbm5fUmVubyRhbmRlbCwKIyAgICAgICAgIExRX2FyYl9CeWdnX0FubGVnZyA9IExRX2FyYl9CeWdnX0FubGVnZyRhbmRlbCwKIyAgICAgICAgIExRX2FyYl9GaW5hbnMgPSBMUV9hcmJfRmluYW5zJGFuZGVsLAojICAgICAgICAgTFFfYXJiX1VuZGVydmlzbmluZyA9IExRX2FyYl9VbmRlcnZpc25pbmckYW5kZWwsCiMgICAgICAgICBMUV9hcmJfSGVsc2UgPSBMUV9hcmJfSGVsc2UkYW5kZWwpCmBgYAoKYGBge3J9CiNMUV9hcmIgPC0gc3lzc2VsX2FyYiAlPiUgCiMgIHNlbGVjdChhYXIsIGtuYXZuLCBMUV9hcmJfSm9yZGJydWssIExRX2FyYl9JbmR1c3RyaSwgTFFfYXJiX0VsX1Zhbm5fUmVubywgTFFfYXJiX0J5Z2dfQW5sZWdnLCBMUV9hcmJfRmluYW5zLCBMUV9hcmJfVW5kZXJ2aXNuaW5nLCBMUV9hcmJfSGVsc2UpCmBgYAoKYGBge3J9CiNMUV9hcmJbaXMubmEoTFFfYXJiKV0gPSAwCmBgYAoKLSAgIAoKIyBQZW5kbGluZwoKRGUgdWxpa2Uga29tbXVuZW5lIG9nIHJlZ2lvbmVuZSBoYXIgdWxpa2UgYmVob3YsIGZvciBhdCByZWdpb25lbmUgc2thbCB1dHZpa2xlIHNlZyBlciBwZW5kbGluZyBldCB2aWt0aWcgYmVncmVwIGZvciDDpSB0aWx0cmVra2Ugc2VnIGFyYmVpZHNrcmFmdC4KVmVsZGlnIG1hbmdlIGtvbW11bmVyIGhhciBmb3IgbGl0ZSBhcmJlaWRzcGxhc3NlciBpIGZvcmhvbGQgdGlsIGFudGFsbCBhcmJlaWRlbmRlIGlubmJ5Z2dlcmUsIHNvbSB2aWwgc2kgYXQgZGUgZmxlc3RlIGVyIGF2aGVuZ2lnZSBhdiBwZW5kbGVyZS4KUGVuZGxpbmcga2FuIHbDpnJlIHRpbCBhbmRyZSBrb21tdW5lciBpIHNhbW1lIHJlZ2lvbiBlbGxlciB0aWwgYW5kcmUgcmVnaW9uZXIuCkFsbGUga29tbXVuZXIgaGFyIGthbnNramUgaWtrZSBhcmJlaWRzcGxhc3NlciBpbm5lbiBhbGxlIGZhZ2ZlbHQsIGFyYmVpZHN0YWtlcmUgZXIgZGVyZm9yIGF2aGVuZ2lnIGF2IMOlIHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmVyIGZvciDDpSBmaW5uZSByZWxldmFudCBhcmJlaWQuCkRldCBzYW1tZSBnamVsZGVyIGRlcnNvbSBhcmJlaWRzdGFrZXIgaGFyIHRpbGjDuHJpZ2hldCB0aWwgZW4ga29tbXVuZSwgbWVuIGRldCBpa2tlIGZpbm5lcyByZWxldmFudCBhcmJlaWQgZGEgZXIgaGFuIG9nc8OlIG7DuGR0IHRpbCDDpSBzw7hrZSBqb2JiIGkgYW5kcmUga29tbXVuZXIuCkhlciBrb21tZXIgYmVncmVwZW5lIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgaW5uLCBzb20gYmV0eXIgYXQgbm9lbiBrb21tdW5lciBlbGxlciByZWdpb25lciBoYXIgZmxlcmUgYXJiZWlkc3BsYXNzZXIgdGlsZ2plbmdlbGlnZSBlbm4gZGUgaGFyIGlubmJ5Z2dlcmUgc29tIGthbiBqb2JiZSBpbm5hZCBpIGtvbW11bmVuIGVsbGVyIGF0IGRlIGlra2UgaGFyIG5vayBhcmJlaWRzcGxhc3NlciBvZyBpbm5ieWdnZXJlbmUgZXIgbsO4ZHQgdGlsIMOlIHPDuGtlIGpvYmIgYW5kcmUgcGxhc3Nlci4KVmkgc2thbCBzZSBww6UgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZyBzb20gdmlsIGt1bm5lIGZvcnRlbGxlIG9zcyBpIGh2aWxrZW4gZ3JhZCBldCBzdGVkIGVyIGludGVncmVydCBpIGV0IHN0w7hycmUgYXJiZWlkc21hcmtlZCA8aHR0cHM6Ly9yZWdpb25hbGFuYWx5c2Uubm8vcmFwcG9ydC8zMDA0LzEvND4uCgpOZWRlbmZvciB2aWwgdmkgZsO4cnN0IHRhIGZvciBvc3MgcmVnaW9uZW4gSGF1Z2FsYW5kZXQgb2cgU3VubmhvcmRsYW5kIG1lZCBVbGxlbnN2YW5nLCBvZyBzZSBww6UgZGlzc2UgcmVnaW9uZW5lIGh2ZXIgZm9yIHNlZy4KU8OlIGtvbW1lciBlbiB0YWJlbGwgc29tIHRhciBmb3Igc2VnIGRpc3NlIHJlZ2lvbmVuZSBzYW1sZXQuClZpIMO4bnNrZXIgZsO4cnN0IMOlIHNraWxsZSBkaXNzZSB0byByZWdpb25lbmUgZm9yIMOlIHNlIGkgaHZpbGtlbiBrb21tdW5lIGFuZGVsZW4gYXYgaW5ucGVuZGxpbmcgb2cgdXRwZW5kbGluZyBlciBzdMO4cnN0IG9nIG1pbnN0LgpGb3Igc8OlIMOlIHNlIHDDpSBwZW5kbGluZ2VuIG1lbGxvbSByZWdpb25lbmUuCgpJIHJhZGVuZSBzZWVzIHBlbmRsaW5nIGlubiB0aWwga29tbXVuZW5lLgpOZWRlcnN0ZSByYWQgdmlzZXIgdG90YWxlbiBhdiBhbnRhbGwgcGVuZGxlcmUgaW5uIHRpbCBkZW4gZW5rZWx0ZSBrb21tdW5lLgpIZXIga2FuIHZpIHNlIGVuIGFuZGVsIHN0aWxsaW5nZXIgc29tIGVyIGJlc2F0dCBhdiBhcmJlaWRzdGFrZXJlIGZyYSBhbmRyZSBrb21tdW5lciBpIEhhdWdhbGFuZHNyZWdpb25lbi4KCkkga29sb25uZW5lIHNlciBtYW4gZGUgc29tIHBlbmRsZXJlIHV0IGF2IGh2ZXIgZW5rZWx0IGtvbW11bmUuCkRldCB2aWwgc2kgYXJiZWlkc3Rha2VyZSBzb20gYm9yIGkgZW4ga29tbXVuZSwgb2cgc29tIGhhciBhcmJlaWRzdGVkIGkgZW4gYW5uZW4ga29tbXVuZSBpbm5lbmZvciBIYXVnbGFuZHNyZWdpb25lbi4KCkRlIHNvbSBlciBtYXJrZXJ0IG1lZCBndWx0IGVyIGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaSBzYW1tZSBrb21tdW5lLgoKSGF1Z2xhbmRzcmVnaW9uZW46CgohW10oQmlsZGUvSGF1Z2FsYW5kZXQuUE5HICJIYXVnbGFuZHNyZWdpb25lbiIpCgpIYXVnYWxhbmRzcmVnaW9uZW4gaGFyIDQ0MTE5IGFyYmVpZHNwbGFzc2VyLCBodm9yYXYgMTMxNzAgZXIgcGVuZGxlcmUuCgpIYXVnZXN1bmQsIEthcm3DuHkgb2cgVHlzdsOmciBlciBkZSBrb21tdW5lbmUgaSByZWdpb25lbiBtZWQgaMO4eWVzdCBhbmRlbCBwZW5kbGVyZSBiw6VkZSBuw6VyIGRldCBnamVsZGVyIGlubi0gb2cgdXRwZW5kbGluZy4KTGEgb3NzIHNlIG7DpnJtZXJlIHDDpSBIYXVnZXN1bmQgc29tIGhhciBlbiBzdG9yIGRlbCBhdiBhcmJlaWRzdGFrZXJuZSBpIHJlZ2lvbmVuLgpEZXQgZ2plbGRlciBiw6VkZSBuw6VyIHZpIHNlciBww6UgaW5ucGVuZGxpbmcsIHV0cGVuZGxpbmcgb2cgZGUgc29tIGJvciBvZyBqb2JiZXIgaSBzYW1tZSBrb21tdW5lLgpVdCBpZnJhIHRhYmVsbGVuIGthbiB2aSBzZSBhdCBIYXVnZXN1bmQgaGFyIDExNzE0IGFyYmVpZHN0YWtlcmUgc29tIGJvciBvZyBqb2JiZXIgaSBrb21tdW5lbi4KRnJhIEhhdWdlc3VuZCBlciBkZXQgZWtzZW1wZWx2aXMgMTAyOSBhcmJlaWRzdGFrZXJlIHNvbSBwZW5kbGVyIHRpbCBUeXN2w6ZyIG9nIDI1ODYgYXJiZWlkc3Rha2VyZSBzb20gcGVuZGxlciB0aWwgS2FybcO4eS4KVGlsIFNhdWRhIG9nIFV0c2lyYSBlciBkZXQgZW4gYmV0eWRlbGlnIGxhdmVyZSBhbmRlbCBzb20gcGVuZGxlci4KR3J1bm5lbiB0aWwgYXQgZGV0IG5vayBhdCBkZXQgZXIgbWluZHJlIGtvbW11bmVyIG1lZCBmw6ZycmUgYXJiZWlkc3BsYXNzZXIuCk1hbmdlIGF2IGRlIHNvbSBib3IgaSBkaXN0cmlrdGVuZSBzb20gZWtzZW1wZWx2aXMgU2F1ZGEgb2cgVXRzaXJhIGpvYmJlciBvZyBib3IgaSBzYW1tZSBrb21tdW5lLgpWaSBrYW4gc2UgYXQgaSBTYXVkYSBqb2JiZXIgb2cgYm9yIGRldCAxNzg5IGFyYmVpZHN0YWtlciwgbWVucyBkZSBoYXIgMzEgc3R5a2sgc29tIHBlbmRsZXIgaW5uIHRpbCBrb21tdW5lbiBvZyA2NiBzdHlrayBzb20gcGVuZGxlciB1dCBhdiBrb21tdW5lbi4KRGV0IGthbiB2w6ZyZSBmbGVyZSBzb20gcGVuZGxlciBpbm4gdGlsIG9nIHV0IGF2IGtvbW11bmVuIGZyYSBhbmRyZSByZWdpb25lciwgbWVuIGhlciBzZXIgdmkgdGFsbGVuZSBww6UgZGUgc29tIHBlbmRsZXIgaSBIYXVnYWxhbmRzcmVnaW9uZW4uCgpWaSB2ZXQgYXQgSGF1Z2VzdW5kIGVyIHJlZ2lvbnNlbnRydW0gbWVkIHN5a2VodXMgb2cgaMO4Z3Nrb2xlLgpTYW10aWRpZyBoYXIgSGF1Z2VzdW5kIGZsZXJlIG9samUgb2cgc2rDuGZhcnRzbsOmcmluZ2VyLgpEZXQgZXIgc2VudHJhbGlzZXJ0IHNvbSBiZXR5ciBhdCBkZXQgZXIgZ3J1bm5sYWcgZm9yIGV0IHN0w7hycmUgam9iYm1hcmtlZC4KRGV0IGVyIMOlcnNha2VuIHRpbCBhdCBIYXVnZXN1bmQgaGFyIG1lciBpbm5wZW5kbGluZyBlbm4gZGUgYW5kcmUga29tbXVuZW5lIGkgcmVnaW9uZW4uCkthcm3DuHkgb2cgVHlzdsOmciBzb20gbGlnZ2VyIG7DpnJtZXN0IEhhdWdlc3VuZCBoYXIgc3TDuHJzdCBhbmRlbCB1dHBlbmRsaW5nLCBvZ3PDpSB0aWwgSGF1Z2VzdW5kLgoKU3VubmhvcmRsYW5kCgohW10oQmlsZGUvU3VubmhvcmRsYW5kLlBORyAiU3VubmhvcmRsYW5kIG9nIFVsbGVuc3ZhbmciKQoKSSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGV0IDI4Mjc1IGFyYmVpZHN0YWtlcmUgb20gaGFyIHNpbiBhcmJlaWRzcGxhc3MsIGF2IGRpc3NlIGVyIGRldCAyNTc1IHNvbSBoYXIgc2l0dCBhcmJlaWQgaSBlbiBhbm5lbiBrb21tdW5lIGVubiBkZW4gZGUgYm9yIGkuCgpTb20gdmkga2FuIHNlIGVyIFN0b3JkIGRlbiBrb21tdW5lbiBtZWQgZmxlc3QgYXJiZWlkc3Rha2VyZS4KRGV0dGUga2FuIHZpIHNlIGkgc2FtbWVuaGVuZyBtZWQgYXQgU3RvcmQgZXIgc29tIGV0IHNlbnRydW0gZm9yIHJlZ2lvbmVuLgpFbiBkZWwgYXYgZGUgaW50ZXJrb21tdW5hbGUgc2FtYXJiZWlkZW5lIGhhciBzaW5lIGtvbnRvcmVyIGxva2FsaXNlcnQgcMOlIFN0b3JkLgpTdG9yZCBoYXIgNzMxNCBzb20gYsOlZGUgYm9yIG9nIGFyYmVpZGVyIGlubmFkIGkga29tbXVuZW4uCsOFIGF2IFN0b3JkYWJ1ZW4gc29tIHBlbmRsZXIgdXQgYXYga29tbXVuZW4gZXIgZGV0IGZsZXN0IHNvbSBwZW5kbGVyIHRpbCBCw7htbG8gb2cgRml0amFyLgpEZXR0ZSBnamVsZGVyIG9nc8OlIG1vdHNhdHQgZGEgU3RvcmQgZsOlciBmbGVzdCBpbm5wZW5kbGVyZSBmcmEgZGUgc2FtbWUga29tbXVuZW5lLgpTdG9yZCBvZyBVbGxlbnN2YW5nIGVyIGRlIGVuZXN0ZSBrb21tdW5lbmUgc29tIGhhciBmbGVyZSBzb20gcGVuZGxlciBpbm4gZW5uIHV0LgoKSSBFdG5lIGVyIGRldCBnYW5za2UgbGlrdCBtZWQgaW5uIG9nIHV0cGVuZGxlcmUgZGEgZGUgaGFyIDY2IHNvbSBwZW5kbGVyIHV0IG9nIDYxIHNvbSBwZW5kbGVyIGlubiB0aWwga29tbXVuZW4uCkV0bmUgZXIgb2dzw6UgZGVuIGtvbW11bmVuIHNvbSBoYXIgbWluc3QgYXJiZWlkZXJlIHNvbSBkcml2ZXIgbWVkIHBlbmRsaW5nLgoKVmkgaGFyIHZhbGd0IMOlIHRhIG1lZCBVbGxlbnN2YW5nIGkgU3VubmhvcmRsYW5kc292ZXJzaWt0ZW4uCkV0bmUgb2cgS3Zpbm5oZXJhZCBlciBiZWdnZSBuYWJva29tbXVuZXIgdGlsIFVsbGVuc3ZhbmcuClVsbGVuc3ZhbmcgaGFyIGxpdGUgYsOlZGUgaW5uIG9nIHV0cGVuZGxpbmcuCgpFbiBzYW1sZXQgb3ZlcnNpa3Qgb3ZlciBIYXVnYWxhbmRzcmVnaW9uZW4gb2cgU3VubmhvcmRsYW5kc3JlZ2lvbmVuCgohW10oQmlsZGUvU2FtbGV0LlBORyAiU2FtbGV0IG92ZXJzaWt0IikKClZpIGhhciBzZXR0IHDDpSBpbm5kZWxpbmdlbmUgaSBkZSBmb3Jza2plbGxpZ2UgcmVnaW9uZW5lLgpWaWRlcmUgw7huc2tlciB2aSDDpSBzZSBww6UgcmVnaW9uZW5lIGkgZW4gc2FtbGV0IHRhYmVsbC4KClZpIGhhciB0aWRsaWdlcmUgc2tyZXZldCBvbSBhdCBIYXVnYWxhbmRzcmVnaW9uZW4gaGFyIDEzMTcwIHBlbmRsZXJlLCBtZW5zIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBvZyBVbGxlbnN2YW5nIGhhciAyNTc1IHBlbmRsZXJlLgpPbSB2aSBzZXIgYmVnZ2UgcmVnaW9uZW5lIHNhbWxldCwgw7hrZXIgYW50YWxsIHBlbmRsZXJlIG1lZCB0b3RhbHQgMzMxMSBhcmJlaWRzdGFrZXJlLgpEZXQgdmlsIHNpIGF0IGRldCBlciAzMzExIHN0eWtrZXIgc29tIHBlbmRsZXIgcMOlIHR2ZXJzIGF2IHJlZ2lvbmVuZS4KClV0c2lyYSBoYXIgaWtrZSBpbm4tIGVsbGVyIHV0cGVuZGxlcmUgdGlsIFN1bm5ob3JkbGFuZC4KQm9ydHNldHQgZnJhIGVuIHBlcnNvbiBzb20gcGVuZGxlciB0aWwgU3ZlaW8gaGFyIGhlbGxlciBpa2tlIEJva24gdXRwZW5kbGluZyB0aWwgU3VubmhvcmRsYW5kLgoKSGF1Z2VzdW5kIGVyIGRlbiBrb21tdW5lbiBzb20gaGFyIGZsZXN0IHBlbmRsZXJlIGlubiB0aWwga29tbXVuZW4uCkRlIGxpZ2dlciBsYW5ndCBmb3JhbiBkZSBhbmRyZSBrb21tdW5lbmUgbsOlciBkZXQgZXIgc25ha2sgb20gcGVuZGxpbmcgaW5uIHRpbCBrb21tdW5lbmUuCkthcm3DuHkgZXIgZGVuIGtvbW11bmVuIHNvbSBoYXIgZmxlc3QgaW5uYnlnZ2VyZSBzb20gcGVuZGxlciB1dCBhdiBrb21tdW5lbi4KClZpZGVyZSBrYW4gbWFuIHNlIHDDpSBkZSBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZW5lIHNldHQgaSBmb3Job2xkIHRpbCBzZW50cmFsaXRldCBvZyB0aWxnamVuZ2VsaWdoZXQgaSBkZXQgbG9rYWxlIGFyYmVpZHNtYXJrZWRldC4KCkhhdWdlc3VuZCwgS2FybcO4eSBvZyBTdG9yZCBlciBzZW50cmFsZSBrb21tdW5lciBodm9yIGRldCBmaW5uZXMgZW4gc3RvciBhbmRlbCBhcmJlaWRzcGxhc3NlciBvZyB0aWxnamVuZ2VsaWdoZXRlbiBpIGFyYmVpZHNtYXJrZWRldCBlciBzdMO4cnJlIGVubiBpIGVrc2VtcGVsdmlzIFNhdWRhLCBVdHNpcmEsIFR5c25lcyBlbGxlciBVbGxlbnN2YW5nLgpEZSBzZW50cmFsaXNlcnRlIGtvbW11bmVuZSBoYXIgZW4gZm9yZGVsIGkgZm9yaG9sZCB0aWwgw6Ugc2thcGUga2x5bmdlciwgZGV0IG1lZCB0YW5rZSBww6UgYXQgbsOlciBmbGVyZSBtZW5uZXNrZXIgYm9zZXR0ZXIgc2VnIGkgc2FtbWUgb21yw6VkZSBrYW4gZW4gZHJhIG55dHRlIGF2IGtvbXBldGFuc2VuIGRlIGlubmVoYXIuClNhdWRhLCBVdHNpcmEsIFR5c25lcyBvZyBVbGxlbnN2YW5nIGVyIGVrc2VtcGxlciBww6Uga29tbXVuZXIgaSB1dGthbnRlbiBhdiByZWdpb25lbmUuCkRlIGJlZmlubmVyIHNlZyBzw6VwYXNzIGxhbmd0IHV0ZW5mb3IgYXQgZGUgaWtrZSB2aWwgZHJhIG55dHRlIGF2IHNlbnRyYWxpdGV0LgoKSSBmaWd1ciAzIG9nIDQgdmlzZXMgZGV0IGF0IGRlIHNpc3RlIDEwIMOlcmVuZSBoYXIgSGF1Z2VzdW5kIGhhdHQgZW4gcmVkdWtzam9uIGkgYW50YWxsIGFuc2F0dGUsIG1lbiBLYXJtw7h5LCBWaW5kYWZqb3JkIG9nIFR5c3bDpnIgaGFyIGhhdHQgZW4gbWFya2FudCDDuGtuaW5nIGkgYW50YWxsIGFyYmVpZHN0YWtlcmUuCkRldCB2aSB2ZXQgZXIgYXQgZGV0IGhhciB1dHZpa2xldCBzZWcgc3TDuHJyZSBuw6ZyaW5nc2tseW5nZXIgdXRlbmZvciBIYXVnZXN1bmQgZGUgc2lzdGUgw6VyZW5lIHNvbSBrYW4gaGEgZW4gc2FtbWVuaGVuZyBtZWQgw7hrbmluZyBpIGFudGFsbCBhbnNhdHRlLgpTYW10aWRpZyBoYXIgb2xqZWJyYW5zamVuIGkgc2FtbWUgcGVyaW9kZSBzbGl0dCBtZWQgbmVkZ2FuZ3N0aWRlciBzb20gcMOldmlya2VyIGLDpWRlIEhhdWdlc3VuZCBvZyBTdG9yZC4KRGlzc2Uga29tbXVuZW5lIGhhciBlbiBkZWwgb2xqZWJhc2VydGUgbsOmcmluZ2VyIG9nIGkgZGUgcGVyaW9kZW5lIG9samVtYXJrZWRldCBzdmluZ2VyIHZpbCBhcmJlaWRzbWFya2VkZXQgdmlzZSBtYXJrYW50IG5lZGdhbmcgaSBhbnRhbGwgYXJiZWlkc3BsYXNzZXIuCkRldCB2aWwgb2dzw6UgdmlzZSBlbiBiZXR5ZGVsaWcgw7hrbmluZyBpIGFudGFsbCBhcmJlaWRzcGxhc3NlciBvbSBkZXQgZXIgb3BwZ2FuZ3N0aWRlci4KT3BwZ2FuZ3N0aWRlciBpIG9samVuw6ZyaW5nZW4gZ2lyIGVuIMO4a25pbmcgYXYgcGVuZGxlcmUgaW5uIHRpbCBrb21tdW5lciBzb20gaGFyIHZpcmtzb21oZXRlciBpbm5lbmZvciBvbGplbsOmcmluZ2VuLgoKLSAgIAoKYGBge3Igc2lzdGV9CiMgU2lzdGUKYGBgCgotICAgCg==